在本教程中,我们将讨论一个程序,以了解C ++中的迭代器失效。
在容器对象的元素上进行迭代时,有时如果我们不应用绑定检查,它可能会失效。这主要是由于容器对象的形状和大小的变化而发生的。
#include <bits/stdc++.h> using namespace std; int main() { //声明向量 vector <int> v{1, 5, 10, 15, 20}; //在执行过程中更改向量 //这将导致绑定无效 for (auto it=v.begin();it!=v.end();it++) if ((*it) == 5) v.push_back(-1); for (auto it=v.begin();it!=v.end();it++) cout << (*it) << " "; return 0; }
输出结果
1 5 10 15 20 -1 -1
(可能还会发生,添加新元素时,矢量将被复制到新位置,而我们的迭代器仍指向旧位置,这将导致错误。)