c++set用法入門必看超詳細(xì)-創(chuàng)新互聯(lián)

1、set的作用
set就是集合的意思,集合的特點(diǎn)就是不會(huì)出現(xiàn)重復(fù)的內(nèi)容。一般用來(lái)作查重或去重操作,舉個(gè)場(chǎng)景,給出一個(gè)表:

創(chuàng)新互聯(lián)建站從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元留壩做網(wǎng)站,已為上家服務(wù),為留壩各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
姓名愛(ài)好
小明打籃球
小剛畫畫
小明聽(tīng)音樂(lè)
問(wèn)該表中出現(xiàn)了多少個(gè)人,學(xué)會(huì)了set,就可以很輕松地解決這個(gè)問(wèn)題

2、set的定義
set<儲(chǔ)存的類型>容器名
如:
儲(chǔ)存int型的值 sets;
儲(chǔ)存double型的值 sets;
儲(chǔ)存string型的值 sets;
儲(chǔ)存結(jié)構(gòu)體或者類的值的值 set<結(jié)構(gòu)體名>s;

(1)set的一些基本的成員函數(shù)

//常用函數(shù)(必學(xué))
insert()//插入元素
count()//判斷容器中是否存在某個(gè)元素
size()//返回容器的尺寸,也可以元素的個(gè)數(shù)
erase()//刪除集合中某個(gè)元素
clear()//清空集合
empty()//判斷是否為空
begin()//返回第一個(gè)節(jié)點(diǎn)的迭代器
end()//返回最后一個(gè)節(jié)點(diǎn)加1的迭代器
rbegin()//反向迭代器
rend()//反向迭代器

//功能函數(shù)(進(jìn)階)
find()//查找某個(gè)指定元素的迭代器
lower_bound()//二分查找第一個(gè)不小于某個(gè)值的元素的迭代器
get_allocator()//返回集合的分配器
swap()//交換兩個(gè)集合的變量
max_size()//返回集合能容納元素的大限值

代碼:

#include//c++標(biāo)準(zhǔn)頭文件,可以使用cout,cin等標(biāo)準(zhǔn)編譯用法
#include//使用set需要帶上這個(gè)文件
using namespace std;//命名空間,防止重名給程序帶來(lái)各種隱患,使用cin,cout,map,set,vector,queue時(shí)都要使用
int main(){sets;//定義 
	s.insert(1);//插入元素1 
	s.insert(3);//插入元素3
	s.insert(2);//插入元素2
	cout<<"現(xiàn)有的元素有"<//遍歷set,注意set會(huì)將元素自動(dòng)排序,插入的順序是1、3、2,遍歷的順序是1、2、3 
		cout<//遍歷set,注意set會(huì)將元素自動(dòng)排序,插入的順序是1、3、2,遍歷的順序是1、2、3 
		cout<

運(yùn)行結(jié)果:

現(xiàn)有的元素有
1 2 3

刪除元素3后,現(xiàn)有的元素有
1 2

現(xiàn)在s.size()==2,即有兩個(gè)元素

是否包含元素2:
s.count(2)==1即包含元素2

是否包含元素3:
s.count(3)==0即不包含元素3

s是否是空的:
s.empty()==0即s不為空

s是否是空的:
s.empty()==1即s是空的

s是否是空的:
s.size()==0即s是空的

3、set的兩種遍歷方法

(1)迭代器iterator
代碼:

#include#includeusing namespace std;
int main(){sets;//定義 
	s.insert(1);//插入元素1 
	s.insert(3);//插入元素3
	s.insert(2);//插入元素2
	set::iterator it;//使用迭代器
	for(it=s.begin();it!=s.end();it++){cout<<*it<<' ';
	} 
}

運(yùn)行結(jié)果:

1 2 3

set有一個(gè)很重要的特性,那就是自動(dòng)升序排序,在很多場(chǎng)景可以方便使用,那么當(dāng)需要降序排序的時(shí)候需要怎樣呢?
1、逆向思維
從end()-1到begin()遍歷就是降序的了

#include#includeusing namespace std;
int main(){sets;//定義 
	s.insert(1);//插入元素1 
	s.insert(3);//插入元素3
	s.insert(2);//插入元素2
	set::iterator it;//使用迭代器
	for(it=--s.end();it!=--s.begin();it--){cout<<*it<<' ';
	} 
}

運(yùn)行結(jié)果:

3 2 1

2、rbegin()和rend()
逆向迭代器本來(lái)就是實(shí)現(xiàn)逆向迭代的功能的,下面看用法

#include#includeusing namespace std;
int main(){sets;//定義 
	s.insert(1);//插入元素1 
	s.insert(3);//插入元素3
	s.insert(2);//插入元素2
	set::reverse_iterator it;//使用反向迭代器
	for(it=s.rbegin();it!=s.rend();it++){cout<<*it<<' ';
	} 
}

運(yùn)行結(jié)果:

3 2 1

(2)foreach遍歷

#include#includeusing namespace std;
int main(){sets;//定義 
	s.insert(1);//插入元素1 
	s.insert(3);//插入元素3
	s.insert(2);//插入元素2
	for(auto it:s){cout<

運(yùn)行結(jié)果:

1 2 3

這種寫法簡(jiǎn)單易記,但是不能實(shí)現(xiàn)降序遍歷

課外知識(shí)
auto用法,c++auto用法強(qiáng)大,當(dāng)你無(wú)法確定變量的類型時(shí),都可以用auto來(lái)代替,迭代器iterator很難記住,其實(shí)可以用auto來(lái)代替:

#include#includeusing namespace std;
int main(){sets;//定義 
	s.insert(1);//插入元素1 
	s.insert(3);//插入元素3
	s.insert(2);//插入元素2
	for(auto it=s.begin();it!=s.end();it++){cout<<*it<<' ';
	} 
}

運(yùn)行結(jié)果:

1 2 3

是不是很簡(jiǎn)單呢?

剛接觸肯定會(huì)覺(jué)得難,多些做題多些用,熟悉了就容易了,兄弟萌,加油?。?!

文章尚有不足,歡迎大牛們指正

感謝觀看,點(diǎn)個(gè)贊吧

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享標(biāo)題:c++set用法入門必看超詳細(xì)-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://muchs.cn/article24/cdcoce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、Google、商城網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)