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

216
15 декабря 2016, 16:13

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

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

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

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

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

Answer 1

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

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

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

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

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

Answer 2

Функция advance

READ ALSO
Прокси класс

Прокси класс

Полностью рабочий код, в котором продемонстрировано создание двухмерного массива с помощью прокси классаТолько есть вопрос

246
Как развернуть приложение на Qt на другой Windows машине?

Как развернуть приложение на Qt на другой Windows машине?

Как правильно проинсталировать на другом компьютере программу с ОС Windows, написанную на Qt C++? Проект в Qt CreatorДелаю релиз

399
Абстрактные классы

Абстрактные классы

У меня есть абстрактный класс GeometryObjects и три класса наследника Point (точка), Line (2 точки), Polyline (список точек)Я создал список геометрических объектов:

261
Связанные списки/linked lists

Связанные списки/linked lists

Изучаю сейчас самостоятельно связанные списки СКто-нибудь может сказать, почему, несмотря на то, что в последнем цикле while я вывожу лишь l1, l2 каким-то...

230