C ++:如何跟踪指向STL列表元素的指针?

时间:2011-07-23 16:47:59

标签: c++ stl

我想跟踪指向列表元素的指针以进行下一次读取访问。每次读取列表时,该指针都会前进。假设我在删除列表元素时采取了适当的预防措施,将迭代器作为成员变量缓存到列表是不是不好?

4 个答案:

答案 0 :(得分:4)

列表元素的迭代器在其引用的元素被删除之前一直有效。这是由标准保证的。

缓存迭代器没有问题,只要确保不从列表中删除元素或者在执行时刷新缓存的迭代器。

答案 1 :(得分:3)

意图使用迭代器。它们不仅仅用于循环for循环中的每个元素。所有你必须考虑的是迭代器失效的规则。

任何将元素插入列表的操作都可以使

std::vector迭代器无效。超出插入点的所有元素的迭代器都将失效,并且如果插入操作导致容量增加,则所有迭代器都将失效。从向量中移除元素的操作将在移除点之后使任何迭代器无效。

任何在双端队列中的任何位置添加或删除元素的操作都会使

std::deque迭代器失效。因此,将这些保存很长时间可能不是一个好主意。

std::liststd::setstd::map迭代器仅通过特定删除迭代器引用的特定元素而失效。这些是迭代器类型中寿命最长的。

只要记住这些规则,就可以随意存储这些迭代器。存储std::list迭代器肯定是不错的形式,只要你能确定那个特定的元素不会去任何地方。

答案 2 :(得分:2)

通过使用std::list<T>std::list<T>::iterator,您可以通过平台和编译器独立方式正确推进STL std::list<T>::const_iterator的唯一方法是除非您计划实施自己的链接列表,否则这是您唯一的选择。根据标准,正如其他人发布的那样,std::list元素的迭代器将保持有效,直到该元素从列表中删除。

答案 3 :(得分:-1)

您所询问的内容称为“输入迭代器”,快速搜索将为您提供质量实现。