Скажем, у меня есть std::list<int> lst и некоторая std::list<int>::iterator it для итерации по списку. И зависит от значения it Я хочу использовать it + 1 или it - 1 в своем коде. Есть ли хороший способ сделать это, как next(), prev() (я не мог найти такие вещи в документации stl)? Или мне нужно копировать it каждый раз и увеличивать (уменьшать) копию?
Как получить следующий (предыдущий) элемент в std:: list без приращения (уменьшения) итератора?
Ответ 1
Копирование и увеличение/уменьшение копии - это единственный способ сделать это.
Вы можете написать функции-оболочки, чтобы скрыть его (и, как упоминалось в ответах, С++ 11 имеет std:: prev/std:: next, которые делают именно это (и Boost определяет аналогичные функции). Но они являются обертками вокруг этого "копировать и увеличивать", поэтому вам не нужно беспокоиться о том, что вы делаете это "неправильно".
Ответ 2
Да, поскольку С++ 11 есть два метода, которые вы ищете: std::prev и std::next. Вы можете найти их в библиотеке итератора.
Пример из cppreference.com
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::list<int> v{ 3, 1, 4 };
auto it = v.begin();
auto nx = std::next(it, 2);
std::cout << *it << ' ' << *nx << '\n';
}
Вывод:
3 4
Ответ 3
Простое предварительное решение: prior и next из Boost.utility. Они используют operator-- и operator++, но не требуют создания временного.