我需要到达STL列表中的项目。我相信这些项目的类型是list_item或ListItem。我需要每个项目的“下一个”和“上一个”。我该怎么做?
答案 0 :(得分:7)
std::list
本身不支持next
或prev
。迭代器用于从元素到元素,没有它就不能遍历标准列表。
答案 1 :(得分:3)
你不能在每个项目上使用next和prev - std :: list不是一个侵入式容器。如果你真的不想使用迭代器(为什么?),你可以通过调用front()然后通过pop_front()删除它来获取每个项目,直到列表中没有更多的项目为止。
答案 2 :(得分:1)
你可以继续使用Nemanja Trifunovic的想法。通过使用两个列表,您可以通过从“原始”列表的前面弹出一个元素并在第二个“帮助者”列表的末尾推送它来“遍历”列表 - 具有以下内容:
[] [1, 2, 3, 4, 5]
^
[1] [2, 3, 4, 5]
^
[1, 2] [3, 4, 5]
^
[1, 2, 3] [4, 5]
^
[1, 2, 3, 4] [5]
^
你所谓的“聪明”避免使用迭代器就像双向迭代器一样。 ^
显示“当前”元素。
当然你可能会把它变成一个类或什么......
问题是 - 它真的值得吗?只使用迭代器会更简单(更不用说它已经实现了)。
答案 3 :(得分:0)
对于std::list
,您的选择是迭代和标准算法。没有办法从项目本身前进/后退。
如果你真的想要一个侵入性列表,那么boost确实提供了这个。见http://www.boost.org/doc/libs/1_40_0/doc/html/intrusive/usage.html
答案 4 :(得分:0)
可能是你可以用另一种方法做某事,然后让它看起来像next和prev。