2010年5月25日 星期二

[C/C++]vector在迴圈中刪除元素

#include < iostream >
#include < algorithm >
#include < vector >
using namespace std;

int main () {
 vector< int > v;
 for(int i = 1; i <=100;i++ ){
  v.push_back(i);
 }
 
 //for(vector< int >::iterator it = v.begin();it!=v.end();){
 // if((*it%2) == 0){
 //  //cout <<"5";
 //  it = v.erase(it);
 //  
 // }else{
 //  ++it;
 // }
 // 
 //}
 //this can correctly erase node

 for(vector< int >::iterator it = v.begin();it!=v.end();++it){
  if((*it%2) == 0){
   --(it = v.erase(it));
  }
 }
 //this is also a correct way......

 //print out
 for(vector< int >::iterator it = v.begin();it!=v.end();++it){
  cout << *it<<" ";
 }

 system("pause");
}
在traverse vector的時候,常常會有需求要刪掉某些元素
這時會因為iterator指向的位置,發生錯誤(erase之後,iterator會指向下一個元素)。
兩種寫法都對...都可以正確的刪掉偶數。
不過還是不建議這種寫法。

沒有留言: