C ++程序中的迭代器无效

在本教程中,我们将讨论一个程序,以了解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

(可能还会发生,添加新元素时,矢量将被复制到新位置,而我们的迭代器仍指向旧位置,这将导致错误。)