STL——遍歷 刪除 set 元素


==================================聲明==================================

本文版權歸作者所有。

 

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

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

未經作者授權請勿用於學術性引用。

未經作者授權請勿用於商業出版、商業印刷、商業引用以及其他商業用途。

 

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

本文鏈接:http://www.cnblogs.com/wlsandwho/p/4468023.html

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

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

在使用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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM