vector和map的erase()函数
2013-01-23 17:16
260 查看
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;
}
这是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;
}
相关文章推荐
- 注意vector, list, set, map成员函数erase
- vector和map的erase()函数
- vector与map的erase()函数详细解析
- 注意vector, list, set, map成员函数erase
- 大家注意vector, list, set, map成员函数erase
- map 和 vector 的erase函数说明
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- list map vector set 常用函数列表
- vector::erase函数的注意事项
- vector和map的erase问题
- vector和map迭代中erase的使用陷阱
- c++之map与vector的erase
- vector和map的erase问题
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- C++测试Map和Vector实现函数的存储
- 【C++】vector容器和list容器中使用单个迭代器的erase函数学习笔记
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- Unique Encryption Keys 暴力学习map,vector 函数