07.25 C++基礎知識第十一天(STL)

1.棧容器(stack) :元素先進後出,單口容器

1)不提供迭代器;沒有遍歷功能

2)以其他的容器作為底層,它相當於提供接口

3)只有棧頂元素才可以被外界取用。所以想遍歷容器,只能從棧頂開始,取出一個元素,就刪除它,當遍歷完後,容器也就沒有元素了。

2.隊列容器(queue):元素先進先出

1)沒有迭代器。不支持隨機訪問

2)兩個出口,一個只進,一個只出。

3)和 stack 棧容器一樣,遍歷完後,容器的元素也被刪除空。

3.( stack 和 queue 容器叫受限的線性表)

3.鏈表容器(list):雙向循環鏈表

1)採用動態存儲分配,不會造成內存浪費和溢出。

2)元素的插入和刪除十分方便,修改指針即可。

3)list容器提供自己的排序算法;

4)list容器的排序(重點在回調函數的使用)

5)swap()既可以交換兩個鏈表的數據,也可以動態的伸縮內存。

4.set容器(紅黑樹,平衡二叉樹的一種)

1)它的元素既是鍵值又是實值,而且所有的元素都會自動排序。

2)不允許兩個元素有相同的鍵值。

3)不允許通過迭代器修改元素的值。

4)與list有某些相同的性質,當對容器中的元素進行插入和刪除操作時,操作之前的所有迭代器,在完成操作完成後都是有效的,除了被刪除的那個元素的迭代器

5.multiset容器:

1)特性和set一樣,唯一區別在於它允許鍵值重複。

6.算法的默認排序原則:都是由小到大;如果想從大到小,就需要自己建立一個回調函數

7.對組( pair ): 將一對值組合成一個值,這一對值可以具有不同的數據類型。兩個值可以分別用對組的公有屬性 first 和 second 訪問。

創建對組的兩種方式:1)pair<string> pair1("xiaobai",20); cout<< pair1.first <<endl>

2)pair<string> pair2 = make_pair("xiaohong",23); cout<< pair2.first <<endl>

3)pair<string> pair3 = pair2; cout<< pair3.first <<endl>

8.map 容器:(它的所有元素都是一個對組)

1)鍵值對;鍵值不可以相同,實值可以相同。所有的元素都會根據鍵值自動排序。

2)插入元素的四種方式:map m;

m.insert(pair(1, 2));

m.insert(make_pair(2, 2));

m.insert(map::value_type(3, 2));

m[4] = 4;

3)如果通過[] 訪問一個不存在的key值,那麼編譯器會創建一個,實值為默認值。

4)map的迭代器與普通容器不同。是一個對組迭代器。可以通過迭代器修改實值的值,不可以修改鍵值的值。

5)map的迭代器與list迭代器有某些相同的性質,對容器元素進行插入和刪除時,操作之前的所有迭代器在操作完成之後不會失效,當然那個被刪除的元素迭代器除外。

6)指定map 的排序規則:(因為它的元素為對組,所以排序規則需要自己寫函數確定)

9.multimap容器:

與map 容器操作類似,唯一不同在於它的鍵值可以相同。

10.如何判斷容器支持隨機訪問(或提供隨機迭代器):

只需要看容器提供的迭代器能否 +2,+3

vector::iterator it = v.begin(); it = it+3;(可以,提供隨機迭代器)

queue::iterator it = q.begin(); it = it+2;(不可以向後跳躍,不提供隨機迭代器)。

11.STL中,所有的拷貝都是值寓意,所提供的內容必須是可以拷貝的。

1)此時就涉及到深拷貝和淺拷貝的問題;當由指針存在,而且它指向堆內存時,用容器提供的拷貝只會複製指針的指向,並沒有拷貝到指針所指向的數據。

當生命週期結束,進行空間析構時,就會出現同一塊內存二次析構,程序掛掉。

2)必須自己重載一個深拷貝函數(和類的函數重載一樣;(一般都是:一個拷貝函數和一個重載=號操作函數)。

12.STL使用 的時機

好了今天的分享就到這裡。下面是本人整理的鏈接,能夠幫助大家快速尋找文章。

linux系統篇鏈接:

C++的知識點,下面幾篇文章鏈接:

網絡編程方面,可以查看以下幾篇文章鏈接:

喜歡我的文章的話,就關注我吧!不要只收藏和轉發哦,每天至少兩篇編程知識給大家,都是本人多年的經驗總結!

/<endl>/<string>

/<endl>/<string>

/<endl>/<string>


分享到:


相關文章: