vector与map的erase()函数详细解析
vector与map的erase()函数详细解析
发布时间:2016-12-28 来源:查字典编辑
摘要:vector循环删除的时候,erase(it)会返回下一个迭代器的地址,保险的做法是赋值给it即it=erase(it)这是vector的内...

vector循环删除的时候,erase(it)会返回下一个迭代器的地址,保险的做法是赋值给it 即 it= erase(it)

这是vector的内部机制所造成的,所以对vector进行erase的时候特别注意迭代器是否会失效!

map则可以直接erase(it++);

vector和map都不能将it++写在for循环中,而在循环体内erase(it)!

复制代码 代码如下:

void main()

{

vector<int> v;

v.push_back(1);

v.push_back(2);

v.push_back(4);

v.push_back(3);

v.push_back(6);

v.push_back(5);

cout << v.size() <<endl;

vector<int>::iterator it;

for(it = v.begin();it != v.end();)

{

if(*it % 2 == 0)

//v.erase(it++);

//it = v.erase(it);

v.erase(it);

else

it++;

}

cout << v.size() <<endl;

for(it = v.begin();it != v.end();it++)

{

cout << *it << " ";

}

// map的完美删除

map<int, int> m;

m[1] = 1;

m[2] = 2;

m[3] = 4;

m[4] = 3;

m[5] = 5;

m[6] = 6;

cout <<"m size = "<<m.size() <<endl;

map<int, int>::iterator it1;

for(it1 = m.begin(); it1!=m.end();)

{

if(it1->second % 2 == 0)

m.erase(it1++);

else

it1++;

}

cout <<"2的整数倍删除后应该剩下i3";

cout <<"m size = "<<m.size() <<endl;

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C语言学习
热门C语言学习
编程开发子分类