程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> STL——遍歷 刪除 set 元素,stlset

STL——遍歷 刪除 set 元素,stlset

編輯:C++入門知識

STL——遍歷 刪除 set 元素,stlset


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

本文版權歸作者所有。

 

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

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

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

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

 

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

本文鏈接: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 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved