stl容器set,map,vector之erase用法與返回值詳細(xì)解析
總結(jié)本人在工作中經(jīng)驗(yàn)教訓(xùn)。
在使用 list、set 或 map遍歷刪除某些元素時(shí)可以這樣使用:
正確使用方法1
std::list< int> List;
std::list< int>::iterator itList;
for( itList = List.begin(); itList != List.end(); )
{
if( WillDelete( *itList) )
{
itList = List.erase( itList);
}
else
itList++;
}
正確使用方法2
std::list< int> List;
std::list< int>::iterator itList;
for( itList = List.begin(); itList != List.end(); )
{
if( WillDelete( *itList) )
{
List.erase(itList++);
}
else
itList++;
}
正確使用方法3
std::list< int> List;
std::list< int>::iterator it, next;
for( it = List.begin(), next = it, next ++; it != List.end(); it = next, ++next)
{
if( WillDelete( *it) )
{
List.erase(it);
}
}
注:方法三更為巧妙,但需注意方法三是用前需要判斷容器是否為空,否則迭代器會(huì)出問題。
我測(cè)試得出,set.erase 不返回迭代器,list返回。
vector 刪除操作
std::vector <PACK_PRINT>::iterator It ;
for(It=printItems.begin();It!=printItems.end();)
{
//我是說這里怎么判斷printItems printItems 里PACK_PRINT.bh =0
if( It.bh ==0) //是這樣嗎?
{//刪除
It=printItems.erase(It);
}
else
{//不刪除
++It;
}
}
std::vector <PACK_PRINT> printItems;
int i = 0;
while(i < printItems.size())
{
if(printItems[i].bh == 0) //這里比如我想把 printItems 時(shí)PACK_PRINT.bh =0 的刪除如何寫喲。另外這樣刪除有錯(cuò)嗎?
{//刪除
printItems.erase(printItems.begin() + i);
}
else
{//不刪除
++i;
}
}
相關(guān)文章
C字符串操作函數(shù)的實(shí)現(xiàn)詳細(xì)解析
以下是對(duì)C語言中字符串操作函數(shù)的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08C語言實(shí)現(xiàn)類似wget的進(jìn)度條效果
這篇文章主要介紹了C語言實(shí)現(xiàn)類似wget的進(jìn)度條效果的方法,主要是讓大家可以熟練的使用轉(zhuǎn)移符\r,這里推薦給大家,需要的小伙伴參考下。2015-03-03C++實(shí)現(xiàn)查詢本機(jī)信息的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)查詢本機(jī)信息,并且進(jìn)行上報(bào),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的可以了解一下2023-05-05C++宏函數(shù)和內(nèi)聯(lián)函數(shù)的使用
本文主要介紹了C++宏函數(shù)和內(nèi)聯(lián)函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07C語言以數(shù)據(jù)塊的形式讀寫文件實(shí)例代碼
本文主要介紹C語言中以數(shù)據(jù)塊的形式讀寫文件,這里提供了實(shí)例代碼舉例說明,有需要的小伙伴可以參考下2016-07-07