vector 删除常见错误

来源:互联网 发布:国家二级c语言成绩 编辑:程序博客网 时间:2024/06/06 07:18
错误用法:
#include <vector>  #include <iostream>  using namespace std;    vector<int> vect;  vector<int>::iterator iter;    int main(int argc, char* argv[])  {      vect.push_back(1);      vect.push_back(1);      vect.push_back(3);      vect.push_back(3);      vect.push_back(4);      vect.push_back(5);      for(iter = vect.begin(); iter != vect.end(); iter++)      {          if (*iter == 3)              iter = vect.erase(iter);      }      for(iter = vect.begin(); iter != vect.end(); iter++)      {          cout << *iter << endl;      }      system("pause");      return 0;  }  

目的:将vect中凡是等于3的项删除

输出结果:

1

1

3

4

5

问题:为什么3没有完全被删除

原因:vect.erase(iter)的作用是删除迭代器iter指向的元素,然后返回指向后一个元素的迭代器的引用。

解决办法:

  1. #include <vector>  
  2. #include <iostream>  
  3. using namespace std;  
  4.   
  5. vector<int> vect;  
  6. vector<int>::iterator iter;  
  7.   
  8. int main(int argc, char* argv[])  
  9. {  
  10.     vect.push_back(1);  
  11.     vect.push_back(1);  
  12.     vect.push_back(3);  
  13.     vect.push_back(3);  
  14.     vect.push_back(4);  
  15.     vect.push_back(5);  
  16.     for(iter = vect.begin(); iter != vect.end(); )  
  17.     {  
  18.         if (*iter == 3)  
  19.             iter = vect.erase(iter);  
  20.         else  
  21.             iter++;  
  22.     }  
  23.     for(iter = vect.begin(); iter != vect.end(); iter++)  
  24.     {  
  25.         cout << *iter << endl;  
  26.     }  
  27.     system("pause");  
  28.     return 0;  
  29. }  

0 0