在代码运行过程之中,发现STL使用erase函数进行数据删除时会发生不知名错误,在此予以代码改进
#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
int main(){
vector<int> m, v;
//ininal m
m.push_back(200);
m.push_back(300);
m.push_back(500);
m.push_back(300);
m.push_back(300);
m.push_back(500);
//print the ininal m
cout<<"ininal m: ";
copy(m.begin(),m.end(),ostream_iterator<int>(cout," "));
cout<<endl;
//copy m to v
v=m;
//delete 300 from m
vector<int>::iterator it;
for(it=m.begin();it!=m.end();it++){
if(*it==300)
m.erase(it);
}
//after delete 300 from m, print the m
cout<<"deleted m: ";
copy(m.begin(),m.end(),ostream_iterator<int> (cout," "));
cout<<endl;
//delete 300 from v
vector<int>::iterator it0;
for(it0=v.begin();it0!=v.end();){
//对于顺序式容器(vector,string,deque)元素的删除、插入操作会导致指向该元素以及后面的元素的迭代器失效
//这里就比较有说法了,因为顺序式容器会使本身