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


本教程中,我们将讨论一个程序,以了解 C++ 中的迭代器失效。

在对容器对象的元素进行迭代时,如果我们不应用边界检查,则有时可能会无效。这主要是由于容器对象形状和大小的变化。

示例

在线演示

#include <bits/stdc++.h>
using namespace std;
int main() {
   //declaring a vector
   vector <int> v{1, 5, 10, 15, 20};
   //changing vector during execution
   //which will cause bound invalidation
   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

(也可能发生这样的情况,为了添加新元素,向量被复制到一个新位置,但我们的迭代器仍然指向旧位置,然后就会出现错误。)

更新于: 01-04-2020

109 阅读次数

开启您的 职业生涯

完成课程即可获得认证

开始学习
广告