繁体   English   中英

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

[英]How do I use C++ STL list without iterator?

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

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

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

您可以提前 go 并使用 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]
              ^

你所谓的“聪明”避免迭代器将像双向迭代器一样工作,几乎。 ^显示“当前”元素。 当然,您可能会将其变成 class 之类的...

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

对于std::list ,您的选择是迭代和标准算法。 没有办法从项目本身向前/向后 go。

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

可能你可以用另一种方法做某事,然后让它看起来像 next 和 prev。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM