我想跟踪指向列表元素的指针以进行下一次读取访问。每次读取列表时,该指针都会前进。假设我在删除列表元素时采取了适当的预防措施,将迭代器作为成员变量缓存到列表是不是不好?
答案 0 :(得分:4)
列表元素的迭代器在其引用的元素被删除之前一直有效。这是由标准保证的。
缓存迭代器没有问题,只要确保不从列表中删除元素或者在执行时刷新缓存的迭代器。
答案 1 :(得分:3)
意图使用迭代器。它们不仅仅用于循环for循环中的每个元素。所有你必须考虑的是迭代器失效的规则。
任何将元素插入列表的操作都可以使 std::vector
迭代器无效。超出插入点的所有元素的迭代器都将失效,并且如果插入操作导致容量增加,则所有迭代器都将失效。从向量中移除元素的操作将在移除点之后使任何迭代器无效。
std::deque
迭代器失效。因此,将这些保存很长时间可能不是一个好主意。
std::list
,std::set
和std::map
迭代器仅通过特定删除迭代器引用的特定元素而失效。这些是迭代器类型中寿命最长的。
只要记住这些规则,就可以随意存储这些迭代器。存储std::list
迭代器肯定是不错的形式,只要你能确定那个特定的元素不会去任何地方。
答案 2 :(得分:2)
通过使用std::list<T>
或std::list<T>::iterator
,您可以通过平台和编译器独立方式正确推进STL std::list<T>::const_iterator
的唯一方法是除非您计划实施自己的链接列表,否则这是您唯一的选择。根据标准,正如其他人发布的那样,std::list
元素的迭代器将保持有效,直到该元素从列表中删除。
答案 3 :(得分:-1)
您所询问的内容称为“输入迭代器”,快速搜索将为您提供质量实现。