std::list - как перемещаться по списку?

Извините, подскажите, а как перемещаться по элементам std:list ?

Перемещение используя итератор, как в std::vector или std::deque - поему то не работает.

std::vector<int>my_vector;

std::vector<int>::iterator my_vec_iter = my_vector.end() - 1;  //Все нормально



std::list<int> my_list;

std::list<int>::iterator my_list_iter = my_list.end() - 1;   //Ошибка

Ответы (3 шт):

Автор решения: Harry

vector — контейнер с произвольным доступом, а list — только с последовательным.

std::list<int> my_list;
std::list<int>::iterator my_list_iter = my_list.end();
--my_list_iter;

А с forward_list не получится даже этого...

→ Ссылка
Автор решения: Stanislav Volodarskiy

Используйте инкременты:

#include <iostream>
#include <list>

int main() {

    std::list<int> list;
    for (int i = 0; i < 10; ++i) {
        list.push_back(i);
    }

    std::list<int>::iterator it = list.end();
    while (it != list.begin()) {
        --it;
        std::cout << *it << ' ';
    }
    std::cout << '\n';
}
$ g++ -std=c++17 -pedantic -Wall -Wextra -Werror list_it.cpp

$ ./a.out
9 8 7 6 5 4 3 2 1 0
→ Ссылка
Автор решения: KoVadim

Если очень хочется написать именно my_list.end() - 1;, то нужно просто использовать правильные функции - std::prev(my_list.end()). Эта функция перегружена правильно для разных контейнеров и может возвратить правильный итератор. Для forward_list оно не работает, но это и контейнер такой интересный, очень и очень урезанный.

→ Ссылка