Есть два алгоритма перебора листа:
for (auto iter = numbers.begin(); iter != numbers.end(); iter++){
std::cout << *iter << "\t";
}
И
for (int n : numbers) std::cout << n << "\t";
Оба этих алгоритма перечисляют элементы с 1го по последний.
А если нужно перечислить с Nго по последний?
Есть возможность в данном примере использовать нечто типа
size_t pos = 0;
for (auto iter = numbers.begin(); iter != numbers.end(); iter++){
if (pos++ > N) std::cout << *iter << "\t";
}
Здесь я считал элементы с нуля.
Однако данный метод я нахожу костыльным, т.к.:
Есть ли более правильное решение данного вопроса?
Спасибо!
Функция std::next
, примененная к итератору, позволит вам найти любой элемент контейнера.
for (auto iter = std::next(numbers.begin(), n); iter != numbers.end(); ++iter)
Однако применение функции std::next
(как и функции std::advance
) с большим и/или неконстантным вторым параметром является "красным флагом" в коде. Именно потому, что вы все равно будете так или иначе перебирать все элементы. Если вы занимаетесь подобным двиганием итератора, не поддерживающего произвольный доступ (т.е. обычный оператор +
), то возможно вы делаете что-то неправильно. В большинстве случаев вы должны относиться к такому применению std::next
/std::advance
как к временному "костылю" в коде.
Ну, по списку все равно придется идти по порядку...
Но в общем случае это делается примерно так:
auto iter = numbers.begin();
advance(it,N);
for (;iter != numbers.end(); iter++){
....
}
или
for (auto iter = next(numbers.begin(),N); iter != numbers.end(); iter++){
....
}
При этом, если контейнер позволяет переходить быстро - переход действительно будет быстрым...
Пример инкремента итератора на 2 позиции.
std::list<int>::iterator it=mylist.begin();
std::advance(it, 2);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Создал диалоговое окно для выбора файлаtxt
Нужно проверить есть ли элемент Х в бинарном деревеМоя функция Find работает рандомно, то находит то не находит (хотя он есть)
Можно ли его как то указать в настройках движка (как в Unity)?
Есть родитель (закрыт для публичного использования):