Если вам часто требуется доступ к N-му элементу последовательности, std::listкоторый реализован как двусвязный список, вероятно, это неправильный выбор. std::vectorили std::deque, вероятно, было бы лучше.
Тем не менее, вы можете получить итератор для N-го элемента, используя std::advance:
std::list<Object> l;
unsigned N = ;
if (l.size() > N)
{
std::list<Object>::iterator it = l.begin();
std::advance(it, N);
}
Для контейнера, который не предоставляет произвольный доступ, например std::list, std::advanceвызывает operator++время итератора N. В качестве альтернативы, если ваша реализация стандартной библиотеки предоставляет это, вы можете вызвать std::next:
if (l.size() > N)
{
std::list<Object>::iterator it = std::next(l.begin(), N);
}
std::nextэффективно обертывает вызов std::advance, облегчая продвижение Nвремени итератора с меньшим количеством строк кода и меньшим количеством изменяемых переменных. std::nextбыл добавлен в C ++ 11.
vectorвместо этого?