Доступ к голове из любого списка STL - PullRequest
1 голос
/ 24 марта 2012

Чтобы получить следующий элемент в списке, нужно просто увеличить итератор. Однако из любого элемента в списке, есть ли способ попасть прямо в начало списка? Например, если итератор указывает на третий элемент списка, есть ли способ попасть в начало списка, кроме повторения в обратном направлении?

Спасибо

Ответы [ 2 ]

3 голосов
/ 24 марта 2012

Нет, поскольку std::list предназначен для моделирования двусвязного списка (и обычно реализуется как один), а в двусвязном списке каждый элемент имеет только указатели на предыдущий и следующий элемент в списке.

0 голосов
/ 24 марта 2012

Нет, и вы даже не можете сделать это, просто имея один итератор: у вас нет возможности узнать, действителен ли итератор, и разрешено ли вам увеличивать или уменьшать его!

Единственный способ сделать это - сравнить ваш итератор (предположительно действительный) с x.begin() и x.end(), но как только вы его получите, у вас уже есть итератор для заголовка списка, и вопрос становится спорным.

Об итераторах всегда следует думать, что они идут парами [first, last), а контейнеры предоставляют такую ​​пару своим begin()/end() функциям-членам.

...