==================================聲明==================================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 }