vector删除元素

来源:互联网 发布:unity3d htc vive开发 编辑:程序博客网 时间:2024/06/14 00:51
/***1.对于节点式容器(map, list, set)元素的删除,插入操作会导致指向该元素的迭代器失效,其他元素迭代器不受影响2.对于顺序式容器(vector,string,deque)元素的删除、插入操作会导致指向该元素以及后面的元素的迭代器失效*//**顺序容器删除操作 *//*#include<iostream>#include<vector>using namespace std;int main(){vector<int> veci;for(int i=0;i<10;++i) { veci.push_back(i); veci.push_back(i); veci.push_back(i+2); } vector<int>::iterator iter;for(iter=veci.begin();iter!=veci.end();++iter) cout<<*iter<<" "; cout<<endl;for(iter=veci.begin();iter!=veci.end();) { if(*iter==7) {iter=veci.erase(iter);//指向了删除后元素的下一个元素     }    else     ++iter;//如果不等于就++  }  for(iter=veci.begin();iter!=veci.end();++iter) cout<<*iter<<" ";}*//**节点式容器 */#include<iostream>#include<list>using namespace std;int main(){list<int> lisi;for(int i=0;i<10;++i) { lisi.push_back(i); lisi.push_back(i); lisi.push_back(i+2); } list<int>::iterator iter;for(iter=lisi.begin();iter!=lisi.end();++iter) cout<<*iter<<" "; cout<<endl;for(iter=lisi.begin();iter!=lisi.end();) { if(*iter==7) {lisi.erase(iter++);//因为节点式只会导致当前节点迭代器失效,所以删除节点的同时对迭代器进行后移的操作,因为其他元素不会失效    }    else     ++iter;//如果不等于就++  }  for(iter=lisi.begin();iter!=lisi.end();++iter) cout<<*iter<<" ";}