Vector迭代器遍历时通过erase删除元素的问题

2022-12-28  本文已影响0人  Duke丶Lee

vector迭代器遍历:

#include <vector>
#include <iostream>
int main(){
  using namespace std;
  vector<int> vec;
  vec.push_back(1);
  vec.push_back(2);
  for(auto iter = vec.begin(); iter != vec.end(); ++iter){
    cout << *iter << endl;
  }
}

vector迭代器遍历时erase删除元素

#include <vector>
#include <iostream>
int main(){
  using namespace std;
  vector<int> vec;
  vec.push_back(1);
  vec.push_back(2);
  // 取消++iter
  for(auto iter = vec.begin(); iter != vec.end();){
    if ((*iter) == 1){
       //erase函数会返回下一个元素的迭代器指针
       iter = vec.erase(iter);
    }else{
       //指向下一个元素
       ++iter;
    }
  }
}

erase函数会将迭代器指针iter变为野指针,此时若继续执行++iter,会导致iter指向未知位置,进而导致运行时Crash。所以将erase函数返回的迭代器指针赋值给iter。

上一篇下一篇

猜你喜欢

热点阅读