我是C ++的新手,我有一个查询:
"How in list all iterators and references unaffected after any operation"
我google了很多,我发现列表中的迭代器失效在任何操作后都不受影响,所以我只想知道当我们在列表上执行一些不会产生任何影响的操作时发生的后端进程是什么在列表迭代器上。
list<string> str;
str.push_back("One");
str.push_back("Two"); // So this doesn't affect the first iterator?
我提到的一些基本规则来自本文: Iterator invalidation rules
答案 0 :(得分:2)
std::list
是经典双链表的实现。每个值都存储在某个节点中,并指向前一个节点和下一个节点。每个列表迭代器都引用这样一个节点 - 除了list.end()
这是一个特例。
这也意味着只要特定列表元素存在,节点就存在。在列表中的其他位置添加或删除元素最多会影响节点的上一个或下一个指针,但节点本身仍然存在。