转自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 }
时间: 2024-11-13 06:11:48