1. 程式人生 > >從std::vector中移除指定元素的方法

從std::vector中移除指定元素的方法

#include <iostream>
#include <algorithm>
#include <vector>
typedef int MyType;
using namespace std;
int main()
{
    std::vector <MyType> vec1; //假設這裡永遠不會存放-1
    std::vector <std::size_t> vec2;
    for(int i=0;i<10;i++)
    {
       vec1.push_back(i);
       if (i%2) vec2.push_back(i);
    }
    vector <size_t>::iterator iter=vec2.begin();
    for(;iter!=vec2.end();++iter)
    {
      if (*iter<vec1.size())
            vec1[*iter] = -1;  //標誌刪除位
    }


    vec1.erase(remove(vec1.begin(),vec1.end(),-1),vec1.end());//重點


    for(int i=0;i<vec1.size();i++) cout<<vec1[i]<<endl;
    return 0;
}
std::remove(first,last,val)
移除[first, last)範圍內等於val的元素
在vector裡面用就類似於
iter = std::remove(vec.begin(), vec.end(), val)

但這個函式只是把val移到vec的末尾,並不真正刪除

未被remove的元素整體前移

真正刪除還是要呼叫一次erase函式