美文网首页
Vector迭代器遍历时通过erase删除元素的问题

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

作者: Duke丶Lee | 来源:发表于2022-12-28 10:34 被阅读0次

    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。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/uczaqdtx.html