vector erase


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 << " ";
    }

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM