vector與map的erase()函數(shù)詳細(xì)解析
vector循環(huán)刪除的時(shí)候,erase(it)會(huì)返回下一個(gè)迭代器的地址,保險(xiǎn)的做法是賦值給it 即 it= erase(it)
這是vector的內(nèi)部機(jī)制所造成的,所以對(duì)vector進(jìn)行erase的時(shí)候特別注意迭代器是否會(huì)失效!
map則可以直接erase(it++);
vector和map都不能將it++寫(xiě)在for循環(huán)中,而在循環(huán)體內(nèi)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的整數(shù)倍刪除后應(yīng)該剩下i3";
cout <<"m size = "<<m.size() <<endl;
}
相關(guān)文章
C語(yǔ)言超詳細(xì)講解數(shù)據(jù)結(jié)構(gòu)中的線性表
線性表,數(shù)據(jù)結(jié)構(gòu)中最簡(jiǎn)單的一種存儲(chǔ)結(jié)構(gòu),專(zhuān)門(mén)用于存儲(chǔ)邏輯關(guān)系為"一對(duì)一"的數(shù)據(jù)。線性表是基于數(shù)據(jù)在實(shí)際物理空間中的存儲(chǔ)狀態(tài),又可細(xì)分為順序表(順序存儲(chǔ)結(jié)構(gòu))和鏈表2022-05-05
C語(yǔ)言學(xué)生信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言學(xué)生信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
C?語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲完整示例代碼
這篇文章主要介紹了如何使用C語(yǔ)言生成1到100之間的隨機(jī)數(shù),并提供了一個(gè)簡(jiǎn)單的猜數(shù)字游戲的實(shí)現(xiàn)代碼,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
c++ std::invalid_argument應(yīng)用
想研究std::invalid_argument的朋友可以參考下2013-01-01

