c++ - 如果底层容器发生变化,迭代器会发生什么变化?

标签 c++ c++11 iterator

<分区>

如果迭代器迭代的容器发生变化,迭代器会发生什么情况?

代码如下:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v = {1,2,3};
    std::vector<int>::iterator it = v.begin();
    std::cout << *it << '\n';
    it++;
    std::cout << *it << '\n';
    v.emplace_back(4);
    it++;
    std::cout << *it << '\n';
    it++;
    std::cout << *it << '\n';

    return 0;
}

输出:

1
2
12230672 // every time you run you get a different value.
0

最佳答案

迭代器无效。这意味着(重言式警报!)它不再有效,并且通过它进行间接访问是未定义的行为。

当附加(在您的情况下,通过 emplace_back)导致重新分配 vector 的内部存储时, vector 可能会发生这种情况。

参见 the draft standard了解更多。

关于c++ - 如果底层容器发生变化,迭代器会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59163782/

相关文章:

python将结构和指针传递给c函数以进行输入和输出

C++对具有多个元素的数据进行双重排序

c++ - 为什么 bool [][] 比 vector<vector<bool>> 更有效

c++ - STL算法中不同类型的严格弱排序

java - 迭代器 hasnext() 返回 true 但 next() 抛出 NoSuchElementException

java - 迭代器会对它的对象状态产生任何副作用吗?

c++ - 你如何使用这个数组而不是请求输入?

c++ - copy-and-swap 技术在赋值运算符函数中使用复制构造函数

c++ - 在字符串 c++ 上使用 str.find() 时执行操作(无子字符串)

Python - 遍历嵌套列表时遇到问题