標籤:style http color 使用 strong os
備忘:唯一從容器中除去一個元素的方法是在那個容器上調用一個成員函數。
以下介紹刪除不同類型的容器中滿足某種條件的值的方法,某種條件指的是
bool badValue(int value)返回true的情況。
1、序列容器
for(SeqContainer<int>::iterator i = c.begin(); i != c.end(); /*nothing*/){ if(badValue(*i)) { //something to do i = c.erase(i); } else ++i;}
這種情況下,一旦刪除完成,erase的傳回值它就是指向緊接在被刪元素之後的元素的有效迭代器。
2、關聯容器
for(AssocContainer<int>::iterator i = c.begin(); i !=c.end(); /*nothing*/){ if (badValue(*i)) { //something to do c.erase(i++); // 刪除元素 } else ++i;}
這種情況下,在erase開始執行前i已經自增了。
3、高效的方法(STL演算法或容器內建演算法)
3.1 序列容器,如SeqContainer<int> c:
對於vector、deque或string,刪除特定值,使用erase-remove:
c.erase(remove(c.begin(), c.end(), 1234), c.end());
對於vector、deque或string,刪除滿足條件的值,使用erase-remove_if:
c.erase(remove_if(c.begin(), c.end(), badValue), c.end());
對於List,刪除特定值,使用內建的remove:
c.remove(1234);
對於List,刪除滿足條件的值,使用內建的remove_if:
c.remove_if(badValue);
3.2 關聯容器,如AssocContainer<int> c:
標準關聯容器(即set、multiset、map或multimap)並沒有叫做remove的成員函數。
刪除特定值方法,c.erase(1234);刪除滿足條件的值,見(2、關聯容器)。
本文出自 商顯技術部落格,轉載時請註明出處及相應連結。
本文永久連結: http://www.uchar.cn/?p=287