Подтвердить что ты не робот

Как получить следующий (предыдущий) элемент в std:: list без приращения (уменьшения) итератора?

Скажем, у меня есть std::list<int> lst и некоторая std::list<int>::iterator it для итерации по списку. И зависит от значения it Я хочу использовать it + 1 или it - 1 в своем коде. Есть ли хороший способ сделать это, как next(), prev() (я не мог найти такие вещи в документации stl)? Или мне нужно копировать it каждый раз и увеличивать (уменьшать) копию?

4b9b3361

Ответ 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++, но не требуют создания временного.