如何跟踪指向STL列表元素的指针
C++: how to track a pointer to a STL list element?
我想跟踪一个指向列表元素的指针,以便下一次读访问。这个指针将在每次读取列表时被提前。假设我在删除列表元素时采取了适当的预防措施,那么将迭代器作为成员变量缓存到列表中是不是一种不好的做法?
指向列表元素的迭代器在它所指向的元素被移除之前一直有效。这是标准所保证的。
缓存迭代器是没有问题的,只要你确保你没有从列表中删除元素或者刷新缓存的迭代器。
要使用迭代器。它们不只是用于在for循环中遍历每个元素。你所要考虑的只是迭代器失效的规则。
std::vector
迭代器可以通过向list中插入元素的任何操作使其失效。插入点以外所有元素的迭代器都失效,如果插入操作导致容量增加,则所有迭代器都失效。从vector中移除元素的操作将使移除点之后的所有迭代器失效。
std::deque
迭代器对于在deque中任意位置添加或删除元素的操作无效。所以把这些东西放太久可能不是个好主意。
std::list
、std::set
和std::map
迭代器只在删除迭代器所指向的特定元素时才失效。这是寿命最长的迭代器类型。
只要记住这些规则,就可以随意存储这些迭代器。存储std::list
迭代器当然不是一种糟糕的形式,只要您能确保特定的元素不会去任何地方。
您能够以独立于平台和编译器的方式正确推进STL std::list<T>
的唯一方法是通过使用std::list<T>::iterator
或std::list<T>::const_iterator
,因此这确实是您唯一的选择,除非您计划实现自己的链表。根据标准,正如其他人在这里发布的那样,指向std::list
元素的迭代器将保持有效,直到该元素从列表中删除。
相关文章:
- C++如何通过用户输入删除列表元素
- 如何检查C ++ STL列表是否为回文?
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 通过动态分配插入列表元素
- 直接访问 STL "set"元素
- 清除 C++ 中的指针的 STL 列表
- 用于编织链接列表元素的Runner Technique
- 在Visual Studio 2013中编译的STL列表代码在Visual Studio 2019中给出了错误.想知道原
- 无法在C 中删除列表元素
- 使用.txt文件填充 STL 列表不起作用
- 为 STL 列表编写选择排序
- 限制指针访问STL ::向量元素
- 如何在不使用循环或迭代器的情况下检查所有列表元素并在满足条件时删除一个
- STL和元素插入中列表的动态分配
- 如何根据STL列表中的元素数量分配内存
- STL列表访问倒数第二个元素
- 如何从 STL 列表中的迭代器访问指向结构的指针而不是其元素
- 用指针直接访问STL列表中的元素
- 如何跟踪指向STL列表元素的指针
- c++中元素如何存储在STL列表中