C++-Set容器增刪查遍歷實現
阿新 • • 發佈:2021-08-05
注:本文僅供個人參考使用,方便查詢,詳情請參考原文。
原文作者:CSDN博主「滄海飛帆」
原文連結:https://blog.csdn.net/ktigerhero3/article/details/78273497
本文介紹set的增刪查遍歷實現,使用例子如下
下面程式統計出現的數字有哪些
#include <iostream> #include<set> using namespace std; int main() { int numList[6]={1,2,2,3,3,3}; //1.set add set<int> numSet; for(int i=0;i<6;i++) { //2.1insert into set numSet.insert(numList[i]); } //2.travese set for(set<int>::iterator it=numSet.begin() ;it!=numSet.end();it++) { cout<<*it<<" occurs "<<endl; } //3.set find useage int findNum=1; if(numSet.find(findNum)!=numSet.end()) { cout<<"find num "<<findNum<<" in set"<<endl; }else{ cout<<"do not find num in set"<<findNum<<endl; } //set delete useage int eraseReturn=numSet.erase(1); if(1==eraseReturn) { cout<<"erase num 1 success"<<endl; }else{ cout<<"erase failed,erase num not in set"<<endl; } return 0; }
1.增加
呼叫insert成員函式,注意,set包含不重複的關鍵字,因此插入一個已經存在的元素對容器沒有影響.
numSet.insert(numList[i]);
2.遍歷
使用set
3.查詢
使用find函式查詢
使用如
if(numSet.find(findNum)!=numSet.end())
find 返回一個迭代器,如果查詢失敗會返回end()元素,否則成功
4.刪除
erase的返回值總是0和1,若返回0,表示刪除的元素不在set中,如
int eraseReturn=numSet.erase(1);
5.迴圈刪除
如刪除值為2的元素程式碼如下
#include <iostream> #include<set> using namespace std; int main() { int numList[6]={1,2,2,3,3,3}; //1.set add set<int> numSet; for(int i=0;i<6;i++) { //2.1insert into set numSet.insert(numList[i]); } //2.travese set for(set<int>::iterator it=numSet.begin() ;it!=numSet.end();it++) { cout<<*it<<" occurs "<<endl; } cout<<"before delete numSet.size()= "<<numSet.size()<<endl; for(set<int>::iterator it=numSet.begin() ;it!=numSet.end();) { cout<<*it<<" occurs "<<endl; if(2==*it) { cout<<*it <<"delete"<<endl; it=numSet.erase(it); //numSet.earse(it++) }else{ it++; } } cout<<"after delete numSet.size()= "<<numSet.size()<<endl; return 0; }
注意,set.earse返回值是刪除的迭代器的下一個
所以可以使用 iter = set.earse(iter)
也可以使用 set.earse(iter++)
在for迴圈中不要用++;