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.insert(pair
m.insert(make_pair(2, 2));
m.insert(map
m[4] = 4;
3)如果通過[] 訪問一個不存在的key值,那麼編譯器會創建一個,實值為默認值。
4)map的迭代器與普通容器不同。是一個對組迭代器。可以通過迭代器修改實值的值,不可以修改鍵值的值。
5)map的迭代器與list迭代器有某些相同的性質,對容器元素進行插入和刪除時,操作之前的所有迭代器在操作完成之後不會失效,當然那個被刪除的元素迭代器除外。
6)指定map 的排序規則:(因為它的元素為對組,所以排序規則需要自己寫函數確定)
9.multimap容器:
與map 容器操作類似,唯一不同在於它的鍵值可以相同。
10.如何判斷容器支持隨機訪問(或提供隨機迭代器):
只需要看容器提供的迭代器能否 +2,+3
vector
queue
11.STL中,所有的拷貝都是值寓意,所提供的內容必須是可以拷貝的。
1)此時就涉及到深拷貝和淺拷貝的問題;當由指針存在,而且它指向堆內存時,用容器提供的拷貝只會複製指針的指向,並沒有拷貝到指針所指向的數據。
當生命週期結束,進行空間析構時,就會出現同一塊內存二次析構,程序掛掉。
2)必須自己重載一個深拷貝函數(和類的函數重載一樣;(一般都是:一個拷貝函數和一個重載=號操作函數)。
12.STL使用 的時機
好了今天的分享就到這裡。下面是本人整理的鏈接,能夠幫助大家快速尋找文章。
linux系統篇鏈接:
C++的知識點,下面幾篇文章鏈接:
網絡編程方面,可以查看以下幾篇文章鏈接:
喜歡我的文章的話,就關注我吧!不要只收藏和轉發哦,每天至少兩篇編程知識給大家,都是本人多年的經驗總結!
/<endl>/<string>/<endl>/<string> /<endl>/<string>閱讀更多 cpp軟件架構獅 的文章