vector::erase

转自http://www.cnblogs.com/xkfz007/archive/2012/08/17/2644061.html

erase的返回值是一个迭代器,而这个迭代器就是指向删除之前元素后的第一个元素

erase把要删除的指针指向了指针的下一个位置

remove,这个函数可以将迭代器范围内的等于某个值的元素“删除“

这里的删除是不改变容器的大小,只是将一些不满足条件的元素前移

这样的话保留的元素都移到了容器的前面,而remove正好就指向要删除的第一个元素,而后面的就是要删除的

然后执行erase操作

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=100010;
 4 vector<int> v;
 5 int x;
 6 int main(){
 7     puts("测试1:------");
 8     v.clear();
 9     v.push_back(2);
10     v.push_back(5);
11     v.push_back(5);
12     v.push_back(5);
13     v.push_back(5);
14     v.push_back(9);
15    // v.push_back(5);
16     x=5;
17     vector<int> ::iterator it;
18     for(it=v.begin();it!=v.end();it++) if(*it==x) v.erase(it);
19     for(it=v.begin();it!=v.end();it++) cout<<*it<<endl;
20 
21     puts("测试2:------");
22     v.clear();
23     v.push_back(2);
24     v.push_back(5);
25     v.push_back(5);
26     v.push_back(5);
27     v.push_back(5);
28     v.push_back(9);
29     v.push_back(5);
30     x=5;
31     for(it=v.begin();it!=v.end();) {
32         if(*it==x) v.erase(it);
33         else it++;
34     }
35     for(it=v.begin();it!=v.end();it++) cout<<*it<<endl;
36 
37     puts("测试3:------");
38      v.clear();
39     v.push_back(2);
40     v.push_back(5);
41     v.push_back(5);
42     v.push_back(5);
43     v.push_back(5);
44     v.push_back(9);
45     v.push_back(5);
46     x=5;
47     v.erase(remove(v.begin(),v.end(),x),v.end());
48     for(it=v.begin();it!=v.end();it++) cout<<*it<<endl;
49 }
View Code
原文地址:https://www.cnblogs.com/yijiull/p/7420803.html