1. 程式人生 > >關於STL容器中vector特定元素的刪除問題

關於STL容器中vector特定元素的刪除問題

問題描述:

給定一組整形數,使用vector容器儲存,現在要求刪掉其中值大於某個值的元素。

即:初始陣列為{8,6,4,2},要求刪除其中大於5的元素。

這裡使用網上給出的一些方法(錯的),主要參考這裡http://zhidao.baidu.com/question/286951956.html

vector<int> price = { 8, 6, 4, 2 };
vector<int>::iterator it;

(1)

for (it = price.begin(); it != price.end();it++)
{
if (*it>5)
{
price.erase(it);
}

}

(2)

for (it = price.begin(); it != price.end();)
{
if (*it>5)
{
price.erase(it++);
}
else
it++;

}

以上兩種方法主要是vector在刪除元素之後迭代器會自動向後移動一位並以此作為返回值,如果直接刪除而沒有利用返回值,原先的it是會訪問錯誤的。下面這一種方法是我自己YY的一種,還好,通過了執行。

int k;
for (k=0; k<size;k++)//刪除大於5的元素
{
if (price[k] >5)
{
price.erase(price.begin()+k);
}

}

這樣整個過程就只有begin的訪問,不涉及其他,從而逃過了一劫。

補充:這個是根據網友評論修改後的程式,需要同時達到遍歷陣列和刪除元素後的訪問,所以要利用返回值,並且每一次的返回值應該自減一次,不然遍歷過程會漏掉被刪除元素的後面那位元素,因為返回值是自動後移一位了的。

for (it = price.begin(); it != price.end();it++)
{
if (*it > 5)
{
it=price.erase(it);
it--;

}



}