170 похожих чатов

Template <typename Iterator> // struct Range { Iterator begin;

Iterator end;
};

template <typename Iterator, typename Predicate>
static Range<Iterator> findRange(Iterator first, Iterator last, Predicate predicate)
{
bool firstFound = false;
Range<Iterator> scope { first, last };
for (Iterator iter = first; iter != last; ++iter)
{
auto predicateResult { predicate(*iter) };
if (predicateResult && !firstFound)
{
scope.begin = iter;
firstFound = true;
}
else if (!predicateResult && firstFound)
{
scope.end = iter;
break;
}
}
return scope;
}

Заранее извиняюсь за, возможно, глупый вопрос, но ничего похожего в <algorithm> нет? Грубо говоря, функции для нахождения диапазона значений в контейнере, для которых Predicate вернёт true

21 ответов

57 просмотров

find_if?

vladd12- Автор вопроса
d7d1cd
find_if?

Только для одного элемента же

в algorithm нету, я не видел

Ну в принципе непонятно как это реализовать. Вот содержимое контейнера: 1 5 2 7 3 6 9 Я хочу вернуть диапазон на все четные элементы. Но ведь этого сделать нельзя, потому что тут между четными есть нечетные, а "диапазон" - это "от сих до сих".

std::equal_range ?

vladd12- Автор вопроса
d7d1cd
Ну в принципе непонятно как это реализовать. Вот с...

Ну это вы правильно заметили, у меня скорее вырожденный случай, когда в контейнере имеются значения, подчиняющиеся определённым закономерностям. Приведённая мной функция находит только первый диапазон, для поиска всех диапазонов надо что-то другое придумывать

vladd12- Автор вопроса

А ассоциативные нельзя использовать?

Просто в неупорядоченном контейнере некорректно вести разговор о диапазоне..

Придется тогда свой алгоритм использовать. Но написать легко, std::find по первому элементу искомого ренжа, + std::equal начиная с него. В 5 строчек пишется

vladd12- Автор вопроса
Зюльковский Александр
Просто в неупорядоченном контейнере некорректно ве...

К сожалению, там довольно специфическая задача, придётся вдаваться в ненужные детали 😅

Aleksander Spichak
Почему же?

Как определить диапазон в неупорядоченном множестве?

Зюльковский Александр
Как определить диапазон в неупорядоченном множеств...

как итератор на начало и конец внутри какого-то контейнера?)

Aleksander Spichak
как итератор на начало и конец внутри какого-то ко...

Я имею ввиду математическую абстракцию) Диапазон - это последовательность от условно А, до В. Если данные не упорядочены, то что такое диапазон между А и В? Пример: В, Е, С, А, О, Т, В Или я что-то не так понял?

vladd12- Автор вопроса
Aleksander Spichak
Придется тогда свой алгоритм использовать. Но напи...

Не совсем понимаю, как тут прикрутить std::equal... Скорее надо находить итератор на первый элемент искомого ренжа через std::find_if, и начиная с этого итератора давать std::find_if_not. Или я перемудрил? 🧐

vladd12- Автор вопроса
Зюльковский Александр
Я имею ввиду математическую абстракцию) Диапазон -...

Если представить, что элементы В, Е, С в массиве В, Е, С, А, О, Т, В подчиняются определённым закономерностям, то тогда их можно представить как диапазон 😅

vladd12
Если представить, что элементы В, Е, С в массиве В...

Ну если элементы в массиве подчиняются «каким-то» закономерностям, то он упорядоченный, поэтому и спросил, можете ли вы хранить его иначе)

https://github.com/joboccara/pipes?ysclid=lp12tjhe83831861037#take_while

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта