vector與map的erase()函數詳細解析
vector循環(huán)刪除的時候,erase(it)會返回下一個迭代器的地址,保險的做法是賦值給it 即 it= erase(it)
這是vector的內部機制所造成的,所以對vector進行erase的時候特別注意迭代器是否會失效!
map則可以直接erase(it++);
vector和map都不能將it++寫在for循環(huán)中,而在循環(huán)體內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;
}