Как можно, не используя итератор begin() и end(), двигаться в списке? Нужно просто next. Судя по описанию, то там нет просто next() итератора.
Как можно с центра списка передвинуться дальше?
Вот нашел по теме ответ с использованием массива и функции sizeof, только вот не получается применить пока.
На примере, что хочу.
list<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(3);
Нужно вывести со второго.
С++11 позволяет следующее:
for (auto& element : elements)
{
// element делать что-то
}
Где elements - любой контейнер, поддерживающий как раз методы begin() и end(). Т.е. использование их в неявном виде все равно имеет место.
А вообще не понятно, речь идет о синтаксисе, или какой-то урезанной реализации std::list, у которой нет begin() и end(), у нее должен быть другой способ установить итератор в начало и конец...
Если это вопрос с собеседования (а абсурдность его наводит на такую мысль), то, наверное, они пытались выяснить, насколько хорошо Вы знаете внутреннее устройство контейнера, и, возможно, знаете, где точно в памяти будет располагаться первый элемент, и сможете проинициализировать итератор таким образом, а дальше уже двигать его через operator++. Возможно :) В таком случае, имхо, правильный ответ: реализации STL бывают разные, это является большой проблемой совместимости, например, экспорта данных между разными библиотеками, но Вы предполагаете, что очевидная реализация связного списка - где сам список и есть первый элемент + служебная информация (указатель на последний элемент, длина, какие-то еще данные/методы). Или получить информацию о первом и последнем элементе можно в "служебной информации", которая и будет представлять собой объект list.
Функция advance
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости