#c #boost #stl #c 17
#c #повысить #stl #c 17
Вопрос:
Рассмотрим этот код:
int i{ -1 };
for(i=0; i<size; i) if (predicate(i)) break;
bool found{ i < size };
Это должно быть просто заменить на std::find_if , но для этого нужен итератор для целых чисел в диапазоне от 0 до size-1 . (Эквивалент перечисляемого IEnumerable в C #.Диапазон (0, размер-1).)
Комментарии:
1. Вам нужны диапазоны C 20 или пользовательские итераторы.
2. Я не понимаю, как
found
здесь работает. Неi >= 0
будет истинным, когда цикл завершается, несмотря ни на что?3. Часть инициализации в
for()
цикле происходит до проверки условия и выполнения тела, поэтому это невозможно, этоi
было бы отрицательно, и неясно, чего вы хотите достичь.4. Тогда, пожалуйста, отредактируйте свой вопрос, чтобы сказать это. В нынешнем виде этот вопрос сбивает с толку будущих читателей.
Ответ №1:
Поскольку вы пометили свой вопрос boost
тегом, я предполагаю boost::irange
, что вместе с boost::find_if
выполнит работу:
boost::find_if(boost::irange(0, size - 1), predicate);