【发布时间】:2012-03-11 19:37:36
【问题描述】:
我想编写一个能够返回一系列迭代器来表示更大列表的子集的方法。
这样的“子集”不能由连续的对象组成吗?
例如,如果我有一个包含 n 个对象的 std::list。
例如。
| object1 | object2 | object3 | object4 | ... | objectn
我能否返回仅包含对象 1,3 和 4 的迭代器范围(一对开始/结束,我们可以称为 ItBegin 和 ItEnd)?
例如。
| object1 | object2 | object3 | object4 | ... | objectN
^ ^ ^ ^
| | | |
ItBegin ++ItBegin ++ItBegin ItEnd
这可能还是我需要将对象(或使用指针来避免复制)复制到新列表并返回该列表?
请注意,迭代器子集仅用于读取。 (一对 const_iterator 就可以完成这项工作)
谢谢! 贾科莫
【问题讨论】:
-
迭代器按照特定的迭代顺序进行迭代。因此,您可以 1)编写自定义迭代器,使用特定的“子集”选择算法迭代同一集合,或 2)创建仅包含您需要的元素的“子集”集合。
-
如果你有一个随机访问的容器,而不是
std::list,你的方法可以返回一个索引向量,例如。另一种选择是对容器进行排序,以便连续存储您需要的元素。 -
添加我自己的评论,如果您担心内存消耗,请记住您的子集集合可能只包含对象引用,而不包含对象副本!
标签: c++ pointers reference iterator std