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

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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容