STL——遍歷 刪除 set 元素

==================================聲明==================================html

本文版權歸做者全部。ios

 

本文原創,轉載必須在正文中顯要地註明做者和出處,並保證文章(包括本聲明)的完整性。ide

未經做者受權請勿修改(包括本聲明),保留法律追究的權利。函數

未經做者受權請勿用於學術性引用。網站

未經做者受權請勿用於商業出版、商業印刷、商業引用以及其餘商業用途。spa

 

本文不按期修正完善,爲保證內容正確,建議移步原文處閱讀。
code

本文連接:http://www.cnblogs.com/wlsandwho/p/4468023.htmlhtm

=======================================================================blog

STL是個好東西,在客戶端上用一用沒什麼問題。get

在使用multimap時,伴隨一個set來統計multimap中key的種類。真是省心省力。

然而,時間換空間、空間換時間。伴隨set會帶來開銷。

世間安得雙全法?那一定是晦澀難懂的,不能在普羅大衆間流傳。

=======================================================================

之前一直沒怎麼注意遍歷刪除set。當我隨手寫了個小代碼後,我想知道人類是怎麼作的。

因而搜一搜。

不知爲什麼,網上真是轉載文章一大抄,這也罷了,可爲什麼STL遍歷刪除的例子都要列上錯誤作法?

=======================================================================

set的erase並不返回iterator,因此在遍歷刪除的時候,要使用

void erase (iterator position);

函數。

一個不錯的小網站http://www.cplusplus.com/reference/

=======================================================================

貼上個人純手工小代碼。

 1 #include <iostream>
 2 #include <set>  3  4 using namespace std;  5  6 int main()  7 {  8 set<int> setIntTest;  9 set<int>::iterator itsetIntTest; 10 11 setIntTest.insert(1); 12 setIntTest.insert(2); 13 setIntTest.insert(3); 14 setIntTest.insert(4); 15 setIntTest.insert(5); 16 setIntTest.insert(6); 17 setIntTest.insert(7); 18 19 wcout<<L"Before:"<<endl; 20 for (itsetIntTest=setIntTest.begin();itsetIntTest!=setIntTest.end();itsetIntTest++) 21  { 22 wcout<<*itsetIntTest<<endl; 23  } 24 25 ////////////////////////////////////////////////////////////////////////// 26 wcout<<L"Remove those can not be divided by 3:"<<endl; 27 for (itsetIntTest=setIntTest.begin();itsetIntTest!=setIntTest.end();) 28  { 29 if ((*itsetIntTest)%3!=0) 30  { 31 wcout<<L"Remove\t"<<*itsetIntTest<<endl; 32 33 setIntTest.erase(itsetIntTest++);//必然是擦除後再移動迭代器,因此後++ 34  } 35 else 36  { 37 itsetIntTest++;//這個就無所謂先後了,沒有涉及增刪操做。 38  } 39  } 40 41 ////////////////////////////////////////////////////////////////////////// 42 wcout<<L"After:"<<endl; 43 for (itsetIntTest=setIntTest.begin();itsetIntTest!=setIntTest.end();itsetIntTest++) 44  { 45 wcout<<*itsetIntTest<<endl; 46  } 47 48 return 0; 49 }
相關文章
相關標籤/搜索