目錄
創(chuàng)新互聯(lián)2013年至今,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元西崗做網(wǎng)站,已為上家服務(wù),為西崗各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575一、什么是STL
二、Sequence Containers(維持順序的容器)
①vector(動(dòng)態(tài)數(shù)組)
②list(雙向鏈表)
二、Container Adaptors(基于其他容器實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu))
①stack(棧)
②queue(隊(duì)列)
三、Associative Containers(實(shí)現(xiàn)了排好序的數(shù)據(jù)結(jié)構(gòu))
①set有序集合
②multiset
③map
④multimap
四、Unordered Associative Containers:對(duì)每個(gè) Associative Containers 實(shí)現(xiàn)了哈希版本。
①u(mài)nordered_set:哈希集合
②unordered_multiset
③unordered_map:哈希映射或我哈希表
④unordered_multimap
從根本上說(shuō),STL是一些“容器”的集合,并且也有一些其他內(nèi)容,比如:向量(vector)、棧(stack)、隊(duì)列(queue)、優(yōu)先隊(duì)列(priority_queue)、鏈表(list)、集合(set)、映射(map)等容器;min、max、swap、sort、lower_bound、upper_bound 等算法。
總之,STL是提高C++編寫(xiě)效率的一個(gè)利器。
在本文中重點(diǎn)介紹Sequence Containers,Container Adaptors,Associative Containers,Unordered Associative Containers. 其中重點(diǎn)介紹前兩個(gè)部分,后兩個(gè)部分簡(jiǎn)單提一下。
其他一些常見(jiàn)的庫(kù)函數(shù)詳情請(qǐng)見(jiàn):這里??!
二、Sequence Containers(維持順序的容器) ①vector(動(dòng)態(tài)數(shù)組)任意位置vector是變長(zhǎng)數(shù)組,支持隨機(jī)訪問(wèn),不支持在任意位置O(1)插入。為了保證效率,元素的增刪一般應(yīng)該在末尾進(jìn)行,是我們最常使用?的數(shù)據(jù)結(jié)構(gòu)之一。
頭文件:#include
創(chuàng)建和初始化:在創(chuàng)建和初始化的時(shí),要考慮數(shù)據(jù)類(lèi)型、數(shù)據(jù)的個(gè)數(shù)以及數(shù)據(jù)的值。
vector//空的整型vector
vectorvec2(3) //一個(gè)有3個(gè)元素的vector,初始值為編譯器默認(rèn)
vectorvec3(3,'a') //含有3個(gè)a的字符vector
vectorvec4(vec3) //拷貝了vec3
vectora({1,2,3,4,5}) //對(duì)數(shù)組的初始化
關(guān)于迭代器:相當(dāng)于STL容器的指針,可以用“*"來(lái)解除引用。
一個(gè)保存int的vector的迭代器聲明方法:vector
添加 / 插入元素:在尾部進(jìn)行
a.push_back(6) //尾部插入數(shù)字6
a.pop_back() //刪除最后一個(gè)元素
使用下標(biāo)訪問(wèn)元素:
a[i]
遍歷:for+auto比較快
void text()
{
vectora={1,2,3,4,5};
for(auto x : a)
{
cout<
②list(雙向鏈表)由于鏈表不支持快速隨機(jī)讀取,因此我們很少用到這個(gè)數(shù)據(jù)結(jié)構(gòu),也有一個(gè)例外,是經(jīng)典的LRU問(wèn)題,需要用鏈表的特性解決。
關(guān)于鏈表,還可以看看我之前的文章:數(shù)據(jù)結(jié)構(gòu)1 鏈表?
#include#includeusing namespace std;
//構(gòu)造方法
listl1;
listl2(5,3); //5個(gè)3
int main(){
//遍歷
for(auto e : l1)
{
cout<
二、Container Adaptors(基于其他容器實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu))
①stack(棧)棧是基本的數(shù)據(jù)結(jié)構(gòu)之一,特點(diǎn)是先進(jìn)后出。就像一疊記錄待辦事項(xiàng)的便利貼,插入的便利貼只能放在這一清單的最上面;讀取時(shí)也只能讀取最上面的那一個(gè),并將其扔掉。因此一般只要兩種操作:壓入(插入)和彈出(刪除并讀?。?/p>
stack 常用于深度優(yōu)先搜索,一些字符串匹配問(wèn)題和單調(diào)棧問(wèn)題。
頭文件:#include
常用操作:
#include#includeusing namespace std;
int main(){
stackq;
int x;
cin>>x;
q.push(x); //將x壓入棧頂
q.top(); //讀取棧頂?shù)脑? q.pop(); //刪除棧頂?shù)脑? q.size(); //返回棧中元素的個(gè)數(shù)
q.empty(); //檢查棧是否為空,若為空返回true,否則返回false
}
②queue(隊(duì)列)queue是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。顧名思義,它有兩個(gè)出口,容器允許從一端新增元素,從另一端移除元素。隊(duì)列中只有隊(duì)頭和隊(duì)尾才可以被外界使用,因此隊(duì)列不允許有遍歷行為。
隊(duì)列中進(jìn)數(shù)據(jù)稱(chēng)為入隊(duì)(push),這就像一個(gè)通著的水管,入隊(duì)像水隨著水進(jìn)推著向前。
queue 常用于廣度優(yōu)先搜索。
頭文件:#include
構(gòu)造與賦值:
queuea; //構(gòu)造
queue; //拷貝構(gòu)造函數(shù)
queue& operator=(const queue &que); //重載等號(hào)操作符
數(shù)據(jù)存?。?/p>
push(elem); //往隊(duì)尾添加元素
pop(); //從隊(duì)頭移除第一個(gè)元素
back(); //返回最后一個(gè)元素
front(); //返回第一個(gè)元素
大小操作:
empty(); //判斷堆棧是否為空
size(); //返回棧的大小
三、Associative Containers(實(shí)現(xiàn)了排好序的數(shù)據(jù)結(jié)構(gòu))
①set有序集合有序集合,元素不可重復(fù),底層實(shí)現(xiàn)默認(rèn)為紅黑樹(shù),即一種特殊的二叉查找樹(shù)(BST)。已可以在O(nlog n) 的時(shí)間排序數(shù)組,Ologn) 的時(shí)問(wèn)插入、刪除、查找任意值,O(ogn) 的時(shí)間獲得最小或大值。這里注意,set 和 priority _queue 都可以用于維護(hù)數(shù)據(jù)結(jié)構(gòu)并快速獲取大最小值,但是它們的時(shí)間復(fù)雜度和功能略有區(qū)別,priority_queue 默認(rèn) 不支持刪除任意值,而 set獲得大或最小值的時(shí)間復(fù)雜度略高,具體使用哪個(gè)根據(jù)需求而定。
②multiset支持重復(fù)元素的 set。
③map有序映射或有序表,在set的基礎(chǔ)上加上映射關(guān)系,可以對(duì)每個(gè)元素key存一個(gè)值value。
④multimap支持重復(fù)元素的map。
可以在 O(1)的時(shí)間快速插人、查找、刪除元素,常用于快?速的查詢(xún)一個(gè)元素是否在這這個(gè)容器內(nèi)。
②unordered_multiset支持重復(fù)元素的 unordered_set。
③unordered_map:哈希映射或我哈希表在 unordered_set 的基礎(chǔ)上加上映射關(guān)系,可以對(duì)每一個(gè)元素 key 存一個(gè)值 value。在某些情況下,如果key 的范圍已知且較小,我們也可以用 vector 代替 unordere d_map,用位置表示 key,用每個(gè)位置的值表示 value。
④unordered_multimap支持重重復(fù)元素的unordered_map
你是否還在尋找穩(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)查看詳情吧