一道筆試題:vector::erase()


vector::erase():從指定容器刪除指定位置的元素或某段範圍內的元素
vector::erase()方法有兩種重載形式
如下:
iterator erase(   iterator _Where);
iterator erase(   iterator _First,   iterator _Last);
如果是刪除指定位置的元素時:
返回值是一個迭代器,指向刪除元素下一個元素;
如果是刪除某範圍內的元素時:返回值也表示一個迭代器,指向最後一個刪除元素的下一個元素;

#include <iostream>       
#include <vector>
using namespace std;
int main(void)
{
    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<<"";
    }
  return 0;
}
下面這個代碼輸出的是() :100 300 300 500



在本題中,當 *itor==300成立時,刪除第一個值爲300的元素,同時itor指向下一個元素(即是第二個值爲300的元素),
                            在for(;;itor++)執行itor,itor指向第三個值爲300的元素,進入下一個循環
         進入循環滿足*itor==300,重複上面的過程,執行完循環,itor執行值爲500的元素。
所有整個過程中,只刪除了2個值爲300的元素。 只刪除了第一個和第三個300。

發佈了14 篇原創文章 · 獲贊 23 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章