Как использовать список C ++ STL без итератора? - PullRequest
0 голосов
/ 01 июня 2011

Мне нужно добраться до предметов в списке STL.Я считаю, что эти элементы имеют тип list_item или ListItem.Мне нужно «следующий» и «предыдущий» каждого элемента.как мне это сделать?

Ответы [ 5 ]

7 голосов
/ 01 июня 2011

std::list не поддерживает next или prev само по себе.Итератор используется для перехода от элемента к элементу, и вы не можете просмотреть стандартный список без него.

3 голосов
/ 01 июня 2011

Вы не можете использовать next и prev для каждого элемента - std :: list не является навязчивым контейнером. Если вы действительно не хотите использовать итераторы (почему?), Вы можете перейти к каждому элементу, вызвав front (), а затем удалив его с помощью pop_front (), пока в списке больше не будет элементов.

1 голос
/ 02 июня 2011

Вы можете пойти дальше и использовать идею Неманьи Трифунович.Используя два списка, вы можете «пройти» по списку, выдвинув элемент из начала «исходного» списка и нажав его в конце второго «вспомогательного» списка - что-то вроде этого:1003 * И ваше предполагаемое «умное» избегание итераторов будет работать как двунаправленный итератор, в значительной степени.^ показывает «текущий» элемент.Конечно, вы, вероятно, превратите это в класс или еще что-нибудь ...

Вопрос в том - стоит ли это того?Использование итератора было бы намного проще (не говоря уже о том, что оно уже реализовано).

0 голосов
/ 02 июня 2011

может быть, вы можете использовать другой метод, чтобы сделать что-то, а затем сделать его похожим на следующий и предыдущий.

0 голосов
/ 02 июня 2011

Для std::list ваш выбор - итерация и стандартные алгоритмы. Невозможно перейти вперед / назад от самого элемента.

Если вы действительно хотите навязчивый список, Boost предоставляет это. Смотри http://www.boost.org/doc/libs/1_40_0/doc/html/intrusive/usage.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...