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 閱讀次數

開啟您的 職業生涯

完成課程即可獲得認證

開始學習
廣告
© . All rights reserved.