如何在没有迭代器的情况下使用C ++ STL列表?

时间:2011-06-01 19:54:38

标签: c++ stl

我需要到达STL列表中的项目。我相信这些项目的类型是list_item或ListItem。我需要每个项目的“下一个”和“上一个”。我该怎么做?

5 个答案:

答案 0 :(得分:7)

std::list本身不支持nextprev。迭代器用于从元素到元素,没有它就不能遍历标准列表。

答案 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。