时间:2021-05-19
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;
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C++vector中实际删除元素使用的是容器vecrotstd::vector::erase()方法。C++中std::remove()并不删除元素,因为容器的
Java容器类包含List、ArrayList、Vector及map、HashTable、HashMapArrayList和HashMap是异步的,Vector
在使用STL容器(比如map、list、vector等)的时候,是用放一个对象还是放一个对象指针,即是用vector还是vector,这里的vector可以换成
map和vector都可以用operator[]进行访问,map是用[]中的数据作为key进行查询,而vector是用[]中的数作为下标进行访问。如果在用ope
直接看源码,内有详细解释#include#i