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

How do I use C++ STL list without iterator?

本文关键字:情况下 C++STL 列表 迭代器      更新时间:2023-10-16

我需要访问STL列表中的项目。我相信这些项目的类型是list_item或ListItem。我需要每个项目的"下一个"answers"上一个"。我该怎么做?

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

不能在每个项目上都有next和prev-std::list不是一个侵入性容器。如果你真的不想使用迭代器(为什么?),你可以通过调用front()来获取每个项,然后通过pop_front()将其删除,直到列表中没有更多的项为止。

您可以继续使用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]
              ^

你所谓的"巧妙"避免迭代器的工作方式就像双向迭代器一样。^显示"当前"元素。当然,你可能会把它变成一门课或其他什么。。。

问题是,这真的值得吗?仅仅使用迭代器会简单得多(更不用说它已经实现了)。

对于std::list,您可以选择迭代和标准算法。项目本身没有前进/后退的方法。

如果你真的想要一个侵入性列表,boost确实提供了这一点。看见http://www.boost.org/doc/libs/1_40_0/doc/html/intrusive/usage.html

可能是您可以使用另一种方法来做一些事情,然后使其看起来像next和prev。

相关文章: