最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

機(jī)試小課堂丨 C++ STL容器進(jìn)階,“標(biāo)準(zhǔn)模板庫(kù)”新人上手必學(xué)!

2021-01-12 00:55 作者:蘇世考研  | 我要投稿


蘇世計(jì)算機(jī)考研,程序猿專屬的學(xué)習(xí)分享社區(qū)

【聲明:本文為原創(chuàng)文章,未經(jīng)同意,嚴(yán)禁轉(zhuǎn)載和抄襲,違者將追究其法律責(zé)任】


/?寫在前面的話?/


蘇世機(jī)試小課堂,考研機(jī)試不再慌!


公主號(hào):蘇世學(xué)社考研? 蘇世計(jì)算機(jī)考研


STL是什么?

STL(Standard Template Library),中文翻譯成“標(biāo)準(zhǔn)模板庫(kù)”或者“泛型庫(kù)”,包含了諸多在計(jì)算機(jī)科學(xué)領(lǐng)域里所常用的基本數(shù)據(jù)結(jié)構(gòu)和基本算法,并且做到了數(shù)據(jù)結(jié)構(gòu)和算法的分離,是 C++ 提供的一個(gè)基礎(chǔ)模板的集合,用于完成輸入/輸出、數(shù)學(xué)計(jì)算等功能,高度體現(xiàn)了軟件的復(fù)用性。


STL是C++ 程序庫(kù)的重要組成部分,已完全被內(nèi)置到支持 C++ 的編譯器中,無(wú)需額外安裝。從廣義上講STL代碼分為三類:container(容器)、iterator(迭代器)和algorithm(算法), 位于各個(gè) C++ 的頭文件中,以源代碼的形式提供。


學(xué)STL能干什么?


STL起到了簡(jiǎn)化作用,可以直接調(diào)用別人的代碼,提高代碼的開發(fā)效率!


STL常用內(nèi)容介紹


1

容器(Container)


容器(Container),是用來(lái)管理某一類對(duì)象的集合,是一種數(shù)據(jù)結(jié)構(gòu),如vector、list、deque、set/multiset、map/multimap等。


?

1.1?vector


vector(向量)是一個(gè)封裝了動(dòng)態(tài)大小數(shù)組的順序容器,可以隨機(jī)存取元素,也能夠存放任意類型。元素按照嚴(yán)格的線性順序排序,可以通過(guò)元素在序列中的位置訪問(wèn)對(duì)應(yīng)的元素。也支持對(duì)序列中的元素快速直接訪問(wèn),使用一個(gè)內(nèi)存分配器對(duì)象來(lái)動(dòng)態(tài)處理它的存儲(chǔ)需求。


常用方法:


size() 返回向量大小

max_size() 返回向量最大容量

resize() 更改向量大小

capacity() 真實(shí)大小

empty() 判空,如果是空,返回true

push_back() 末尾添加元素

pop_back() 末尾刪除元素

insert() 任意位置插入元素

erase() 任意位置刪除元素

swap() 交換兩個(gè)向量的元素

clear() 清空向量元素

begin() 指向向量第一個(gè)元素

end() 指向向量最后一個(gè)元素的下一個(gè)位置

front() 訪問(wèn)第一個(gè)元素

back() 訪問(wèn)最后一個(gè)元素


參考代碼和運(yùn)行結(jié)果:




?

1.2 list


listvector容器都是序列式容器,list是一個(gè)由它的數(shù)據(jù)元素通過(guò)鏈表指針串連成邏輯意義的環(huán)狀雙向鏈表,所以只用一個(gè)指針就可以完整實(shí)現(xiàn)。


常用方法:


push_front(x) 把元素x插入鏈表頭部

push_back(x) 把元素x插入鏈表尾部

pop_front() 彈出雙向隊(duì)列的第一個(gè)元素

pop_back() 刪除雙向隊(duì)列的最后一個(gè)元素

begin() 返回list中第一個(gè)元素的迭代器

end() 返回list中最后一個(gè)元素的下一個(gè)位置

clear() 清空l(shuí)ist中的所有元素

empty() 利用empty() 判斷l(xiāng)ist是否為空

front() 獲得list容器中的頭部元素

back() 獲得list容器的最后一個(gè)元素

resize(n) 調(diào)整list的長(zhǎng)度為只容納n個(gè)元素

assign(n,val) 將所有元素替換為n個(gè)val

swap() 交換兩個(gè)鏈表

reverse() 實(shí)現(xiàn)list逆置

merge() 合并一個(gè)list

remove(x) 刪除所有值為x的元素


參考代碼和運(yùn)行結(jié)果:




?

1.3 deque


deque動(dòng)態(tài)將多個(gè)連續(xù)空間通過(guò)指針數(shù)組合在一起,隨時(shí)可以增加一段新的空間,用來(lái)做隊(duì)列,在常數(shù)時(shí)間內(nèi)對(duì)頭尾兩端進(jìn)行插入和刪除操作,雖然和vector一樣都是采用動(dòng)態(tài)數(shù)組來(lái)管理元素,但不需要保留空間,可以隨機(jī)存取。


常用方法:


push_front(x) 將x插入隊(duì)首

push_back(x) 將x插入隊(duì)尾

pop_front() 彈出隊(duì)首

pop_back() 彈出隊(duì)尾

front() 獲取隊(duì)首

back() 獲取隊(duì)尾

empty() 判斷deque是否為空

size() 返回deque當(dāng)前元素的個(gè)數(shù)

clear() 清空一個(gè)deque

max_size() 返回deque所能容納的最大容量

assign(n,val) 將所有元素替換為n個(gè)val

insert(pos,elem) 在pos上插入一個(gè)元素

erase(pos) 刪除pos位置上的元素

resize(n) 重定義deque的大小


參考代碼和運(yùn)行結(jié)果:




?

1.4 set/multiset


set(集合)是一個(gè)用來(lái)存儲(chǔ)同一數(shù)據(jù)類型的關(guān)聯(lián)式容器,每個(gè)元素的值都唯一,而且系統(tǒng)能根據(jù)元素的值自動(dòng)排序。set內(nèi)部采用的是一種非常高效的平衡檢索二叉樹:紅黑樹(Red-Black Tree),性能好于一般的平衡二叉樹。multiset和set的區(qū)別在于multiset可以包含多個(gè)數(shù)值相同的元素,set不可以。


常用方法為:


begin() 返回set容器的第一個(gè)元素 ???????????

end() 返回set容器的最后一個(gè)元素的下一個(gè)位置? ?

clear() 刪除set容器中的所有的元素? ? ? ? ? ??empty() 判斷set容器是否為空,如果為空,返回true??

max_size() 返回set容器能容納的元素最大個(gè)數(shù)

size() 返回當(dāng)前set容器中的元素個(gè)數(shù)

insert() 在集合中插入元素

erase() 在集合中刪除元素

count() 返回某個(gè)值元素的個(gè)數(shù)

find() 返回一個(gè)指向被查找到元素的迭代器

lower_bound() 返回指向大于(或等于)某個(gè)值元素的第一個(gè)迭代器

upper_bound() 返回大于某個(gè)值元素的迭代器


參考代碼和運(yùn)行結(jié)果:




?

1.5 map/multimap


map是一個(gè)關(guān)聯(lián)容器,提供一對(duì)一(key-value)的數(shù)據(jù)處理功能,key和value可以是任意類型,可以根據(jù)key值快速查找value,查找的時(shí)間復(fù)雜度是log(n),也可以快速插入key-value值,快速刪除,根據(jù)key值修改value,遍歷所有數(shù)據(jù)。map內(nèi)部是一棵紅黑樹,具有根據(jù)key值自動(dòng)排序的功能。multimap和map的區(qū)別是multimap的一個(gè)key值可以對(duì)應(yīng)多個(gè)value。


常用方法:


map<int,string> ?mp;構(gòu)造一個(gè)map

insert()? 插入數(shù)據(jù)

mp[1]=”111” 用數(shù)組方式插入數(shù)據(jù)

size() 返回map里有多少數(shù)據(jù)

count() 判定關(guān)鍵字是否出現(xiàn)

find() 定位關(guān)鍵字在哪個(gè)位置出現(xiàn)

lower_bound() 返回查找關(guān)鍵字的下界

upper_bound() 返回查找關(guān)鍵字的上界

erase(iterator it)? 指定某個(gè)位置進(jìn)行刪除

erase(iterator fi,iterator la) 刪除一個(gè)范圍

erase(key) 刪除一個(gè)關(guān)鍵字

clear() 清空所有元素

begin() 返回指向map頭部的迭代器

end() 返回指向map最后一個(gè)鍵值對(duì)的下一個(gè)位置


參考代碼和運(yùn)行結(jié)果:




2

迭代器(iterator)


迭代器用于遍歷對(duì)象集合的元素,這些元素可能是容器,也可能是容器的子集。迭代器相當(dāng)于容器和操作容器的算法之間的中介。


迭代器分為以下四種:


①正向迭代器

容器類名::iterator 迭代器名;

②常量正向迭代器

容器類名::const_iterator 迭代器名;

③反向迭代器

容器類名::reverse_iterator 迭代器名;

④常量反向迭代器

容器類名::const_reverse_iterator 迭代器名;


不同容器的迭代器功能



3

算法(iterator)


算法作用于容器,提供了執(zhí)行各種操作的方式,包括對(duì)容器內(nèi)容執(zhí)行初始化、排序、搜索和轉(zhuǎn)換等操作。


使用C++標(biāo)準(zhǔn)庫(kù)的算法,需要包含頭文件<algorithm>


用于處理一個(gè)或多個(gè)iterator區(qū)間,第一個(gè)區(qū)間通常以起點(diǎn)和終點(diǎn)表示,其他區(qū)間多數(shù)只需要提供起點(diǎn)足夠。


當(dāng)需要用STL中某一個(gè)方法時(shí),建議同學(xué)們自行查閱API文檔。


這里列舉一些算法:


(1)只讀算法:


查找算法



搜索統(tǒng)計(jì)算法



(2)可變序列算法:


可變序列算法包括元素復(fù)制,變換,替換,填充,移除和隨機(jī)生成等。



(3)排序算法:



(4)關(guān)系算法:



(5)堆算法:



(6)list容器特有算法:



蘇世學(xué)社旗下品牌,專注于計(jì)算機(jī)考研

計(jì)算機(jī)考研一手資訊,原創(chuàng)高質(zhì)量干貨

深度的學(xué)習(xí)分享丨咨詢前輩丨個(gè)性化指導(dǎo)



機(jī)試小課堂丨 C++ STL容器進(jìn)階,“標(biāo)準(zhǔn)模板庫(kù)”新人上手必學(xué)!的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
马尔康县| 玛曲县| 抚松县| 永平县| 桃园县| 湘潭县| 芮城县| 昌都县| 达孜县| 达州市| 辽源市| 韶山市| 紫金县| 廊坊市| 宁都县| 辰溪县| 桂阳县| 宜春市| 应城市| 宁城县| 屯留县| 井冈山市| 遂平县| 新平| 肇东市| 平罗县| 桃园县| 巧家县| 萍乡市| 皮山县| 民丰县| 黑龙江省| 城口县| 大安市| 金塔县| 任丘市| 铜山县| 都安| 富顺县| 田东县| 图们市|