vector::erase 從指定容器刪除指定的元素
兩個重載:
iterator erase (iterator position);
刪除指定位置position的元素,並返回刪除元素的下一個元素的迭代器
iterator erase (iterator first, iterator last);
刪除從first到last(不包過last)之間的元素 [first,last),並返回last位置迭代器
遍歷刪除元素方法:
1.
vector<int>array; array.push_back(100); array.push_back(300); array.push_back(300); array.push_back(300); array.push_back(300); array.push_back(500); vector<int>::iterator itor; for (itor = array.begin(); itor != array.end(); itor++){ if (*itor == 300) array.erase(itor); } for (itor = array.begin(); itor != array.end(); itor++) { cout << *itor << " "; }
這種使用方法會內存錯誤,因為刪除itor指定元素后,itor就編程野指針了,正確使用是itor重新賦值為erase返回值。
2.
vector<int>array; array.push_back(100); array.push_back(300); array.push_back(300); array.push_back(300); array.push_back(300); array.push_back(500); vector<int>::iterator itor; for (itor = array.begin(); itor != array.end(); itor++){ if (*itor == 300) itor=array.erase(itor); } for (itor = array.begin(); itor != array.end(); itor++) { cout << *itor << " "; }
這個方式在刪除連續元素會錯誤,結果發現是100 300 300 500,因為itor指向刪除元素下一個元素后,itor++就跳過了刪除元素的下一個元素。
3.正確使用方式
vector<int>array; array.push_back(100); array.push_back(300); array.push_back(300); array.push_back(300); array.push_back(300); array.push_back(500); vector<int>::iterator itor; for (itor = array.begin(); itor != array.end(); ){ if (*itor == 300) itor=array.erase(itor); else itor++; } for (itor = array.begin(); itor != array.end(); itor++) { cout << *itor << " "; }