如何在没有迭代器的情况下使用C++STL列表
How do I use C++ STL list without iterator?
我需要访问STL列表中的项目。我相信这些项目的类型是list_item或ListItem。我需要每个项目的"下一个"answers"上一个"。我该怎么做?
std::list
本身不支持next
或prev
。迭代器用于从一个元素转到另一个元素,没有它就无法遍历标准列表
不能在每个项目上都有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。
相关文章:
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- STL:在没有输出的情况下处理两个集合
- 在不使用任何 STL 容器的情况下删除重复项
- 如何在不使用 STL 的情况下从函数反转字符串后返回字符串C++?
- 如何在<typename> <long> 不更改给定代码的情况下将自定义向量与 STL 向量相互转换?
- 是否可以在没有push_back(C++STL)的情况下使用数组初始化矢量的新位置
- Ogre 如何在没有 C4251 警告的情况下在导出类中使用 STL 容器
- 如何在不进行内存操作的情况下在 C++ 和 STL 中定义 2D 数组
- C++在没有STL的情况下调整指针数组的大小(向量..)
- 是否可以在没有中间容器的情况下编写STL算法
- 为什么在这种情况下STL priority_queue并不比multiset快多少
- 如何在没有STL的情况下从2d阵列中删除任何未填充的插槽
- 如何在不使用STL的情况下,根据参数将元素添加到循环内的两个不同数组中
- 基本STL:向量列表或列表向量,在这种特殊情况下哪个会更好
- 如何在不授予私有成员访问权限的情况下隐藏 C++ 中的 STL 函子结构
- 如何在没有STL的情况下用c++中的Key创建和访问内存块
- 在不调用析构函数的情况下结束STL容器的生存期
- 如何在不使用STL的情况下实现C++字典数据结构
- 在低内存情况下使用带有异常处理的STL容器
- 如何在没有迭代器的情况下使用C++STL列表