Переход между элементами STL списка

Рейтинг: 0Ответов: 2Опубликовано: 26.11.2014

Как можно, не используя итератор begin() и end(), двигаться в списке? Нужно просто next. Судя по описанию, то там нет просто next() итератора.
Как можно с центра списка передвинуться дальше?

Вот нашел по теме ответ с использованием массива и функции sizeof, только вот не получается применить пока.

На примере, что хочу.

list<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(3);

Нужно вывести со второго.

Ответы

▲ 2

С++11 позволяет следующее:

for (auto& element : elements)
{
//    element делать что-то
}

Где elements - любой контейнер, поддерживающий как раз методы begin() и end(). Т.е. использование их в неявном виде все равно имеет место.

А вообще не понятно, речь идет о синтаксисе, или какой-то урезанной реализации std::list, у которой нет begin() и end(), у нее должен быть другой способ установить итератор в начало и конец...

Если это вопрос с собеседования (а абсурдность его наводит на такую мысль), то, наверное, они пытались выяснить, насколько хорошо Вы знаете внутреннее устройство контейнера, и, возможно, знаете, где точно в памяти будет располагаться первый элемент, и сможете проинициализировать итератор таким образом, а дальше уже двигать его через operator++. Возможно :) В таком случае, имхо, правильный ответ: реализации STL бывают разные, это является большой проблемой совместимости, например, экспорта данных между разными библиотеками, но Вы предполагаете, что очевидная реализация связного списка - где сам список и есть первый элемент + служебная информация (указатель на последний элемент, длина, какие-то еще данные/методы). Или получить информацию о первом и последнем элементе можно в "служебной информации", которая и будет представлять собой объект list.