亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

STL常用容器詳細解析

2020-02-24 14:24:57
字體:
來源:轉載
供稿:網友

STL在C語言中是很重要的模版之一,其實它在我們開發中也很方便我們使用,接下來武林技術頻道小編為大家介紹STL常用容器詳細解析的知識,希望能幫助到你。

1、順序性容器

(1)vector
vector是一種動態數組,在內存中具有連續的存儲空間,支持快速隨機訪問。由于具有連續的存儲空間,所以在插入和刪除操作方面,效率比較慢。vector有多個構造函數,默認的構造函數是構造一個初始長度為0的內存空間,且分配的內存空間是以2的倍數動態增長的,即內存空間增長是按照20,21,22,23.....增長的,在push_back的過程中,若發現分配的內存空間不足,則重新分配一段連續的內存空間,其大小是現在連續空間的2倍,再將原先空間中的元素復制到新的空間中,性能消耗比較大,尤其是當元素是非內部數據時(非內部數據往往構造及拷貝構造函數相當復雜)。vector的另一個常見的問題就是clear操作。clear函數只是把vector的size清為零,但vector中的元素在內存中并沒有消除,所以在使用vector的過程中會發現內存消耗會越來越多,導致內存泄露,現在經常用的方法是swap函數來進行解決:?

vector<int> V;V.push_back(1); V.push_back(2);V.push_back(1); V.push_back(2);
vector<int>().swap(V); 或者 V.swap(vector<int>());

利用swap函數,和臨時對象交換,使V對象的內存為臨時對象的內存,而臨時對象的內存為V對象的內存。交換以后,臨時對象消失,釋放內存。

(2)deque
deque和vector類似,支持快速隨機訪問。二者最大的區別在于,vector只能在末端插入數據,而deque支持雙端插入數據。deque的內存空間分布是小片的連續,小片間用鏈表相連,實際上內部有一個map的指針。deque空間的重新分配要比vector快,重新分配空間后,原有的元素是不需要拷貝的。

(3)list
list是一個雙向鏈表,因此它的內存空間是可以不連續的,通過指針來進行數據的訪問,這使list的隨機存儲變得非常低效,因此list沒有提供[]操作符的重載。但list可以很好地支持任意地方的插入和刪除,只需移動相應的指針即可。

(4)在實際使用時,如何選擇這三個容器中哪一個,應根據你的需要而定,一般應遵循下面的原則:
?   1) 如果你需要高效的隨即存取,而不在乎插入和刪除的效率,使用vector
?   2) 如果你需要大量的插入和刪除,而不關心隨即存取,則應使用list
?   3) 如果你需要隨即存取,而且關心兩端數據的插入和刪除,則應使用deque

2、關聯容器

(1)map
map是一種關聯容器,該容器用唯一的關鍵字來映射相應的值,即具有key-value功能。map內部自建一棵紅黑樹(一種自平衡二叉樹),這棵樹具有數據自動排序的功能,所以在map內部所有的數據都是有序的,以二叉樹的形式進行組織。這是map的模板:

template < class Key, class T, class Compare= less<Key>, class Allocator=allocator< pair<const Key,T> > > class map;

從模板中我們可以看出,再構造map時,是按照一定的順序進行的。map的插入和刪除效率比其他序列的容器高,因為對關聯容器來說,不需要做內存的拷貝和移動,只是指針的移動。由于map的每個數據對應紅黑樹上的一個節點,這個節點在不保存你的數據時,是占用16個字節的,一個父節點指針,左右孩子指針,還有一個枚舉值(標示紅黑色),所以map的其中的一個缺點就是比較占用內存空間。

(2)set
set也是一種關聯性容器,它同map一樣,底層使用紅黑樹實現,插入刪除操作時僅僅移動指針即可,不涉及內存的移動和拷貝,所以效率比較高。set中的元素都是唯一的,而且默認情況下會對元素進行升序排列。所以在set中,不能直接改變元素值,因為那樣會打亂原本正確的順序,要改變元素值必須先刪除舊元素,再插入新元素。不提供直接存取元素的任何操作函數,只能通過迭代器進行間接存取。set模板原型:

template <class Key, class Compare=class<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) > class set;
set支持集合的交(set_intersection)、差(set_difference)、并(set_union)及對稱差(set_symmetric_difference) 等一些集合上的操作。

3、容器適配器

(1)queue
queue是一個隊列,實現先進先出功能,queue不是標準的STL容器,卻以標準的STL容器為基礎。queue是在deque的基礎上封裝的。之所以選擇deque而不選擇vector是因為deque在刪除元素的時候釋放空間,同時在重新申請空間的時候無需拷貝所有元素。其模板為:
template < TYPENAME _Sequence="deque<_TP" typeneam _Tp,> > class queue;

(2)stack
stack是實現先進后出的功能,和queue一樣,也是內部封裝了deque,這也是為啥稱為容器適配器的原因吧(純屬猜測)。自己不直接維護被控序列的模板類,而是它存儲的容器對象來為它實現所有的功能。stack的源代碼原理和實現方式均跟queue相同。

看過了武林技術頻道小編為大家介紹的STL常用容器詳細解析后,大家是否有了全新的認識?小編認為武林技術頻道是值得大家收藏的平臺哦。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲综合久久筱田步美| 最近2019中文免费高清视频观看www99| 欧美性猛交xxxxx免费看| 亚洲一品av免费观看| 日本在线观看天堂男亚洲| 精品久久久久久国产91| 日本久久久久亚洲中字幕| 欧美精品制服第一页| 亚洲第一福利视频| 成人福利在线观看| 国产精品稀缺呦系列在线| 欧美在线免费视频| 国产性色av一区二区| 国产999在线观看| 最新国产成人av网站网址麻豆| 成人免费大片黄在线播放| 久久精品视频99| 狠狠躁夜夜躁久久躁别揉| 亚洲欧美日韩久久久久久| 神马久久桃色视频| 欧美激情视频一区二区三区不卡| 动漫精品一区二区| 成人天堂噜噜噜| 亚洲国产私拍精品国模在线观看| 韩国19禁主播vip福利视频| 日韩精品在线免费观看视频| 国产亚洲精品久久久久久| 亚洲毛片在线观看.| 欧美成人激情图片网| 亚洲成人aaa| 69国产精品成人在线播放| 精品无人区太爽高潮在线播放| 亚洲国产精品网站| 亚洲午夜精品久久久久久久久久久久| 久久躁狠狠躁夜夜爽| 国产激情久久久久| 久操成人在线视频| 精品精品国产国产自在线| 精品性高朝久久久久久久| 日韩在线不卡视频| 欧美性猛交xxxx乱大交蜜桃| 国产精品h片在线播放| 欧美国产亚洲精品久久久8v| 亚洲成人av在线| 国产精品专区h在线观看| 91在线免费观看网站| 2019国产精品自在线拍国产不卡| 亚洲第一中文字幕在线观看| 日韩av在线网址| 美女扒开尿口让男人操亚洲视频网站| 亚洲综合成人婷婷小说| 国产精品色婷婷视频| 色香阁99久久精品久久久| 成人xvideos免费视频| 亚洲国产免费av| 亚洲精品在线不卡| 亚洲片国产一区一级在线观看| 色av中文字幕一区| 欧美猛交免费看| 日韩在线中文视频| 久久的精品视频| 欧美性猛交99久久久久99按摩| 欧美精品中文字幕一区| 欧美精品久久久久久久久| 26uuu久久噜噜噜噜| 国产欧美日韩丝袜精品一区| 国产精品视频公开费视频| 成人日韩在线电影| 国产精品视频免费在线观看| 国产在线观看一区二区三区| 97精品一区二区视频在线观看| 不卡av电影在线观看| 成人写真视频福利网| 精品国产一区二区三区久久久狼| 九九热这里只有精品6| 亚洲成人av片| 久久久久久高潮国产精品视| 欧美激情一级精品国产| 国产成人一区二区三区| 在线视频欧美日韩精品| 亚洲欧美在线一区二区| 操日韩av在线电影| 久久久久久久91| 欧美高清视频一区二区| 韩日欧美一区二区| 91精品久久久久久久久久| 欧美日韩精品国产| 伊人久久五月天| 久久天天躁狠狠躁夜夜av| 一区二区三区www| 国产91对白在线播放| 国产日韩欧美日韩大片| 日韩麻豆第一页| 精品动漫一区二区| 亚洲一区二区三区成人在线视频精品| 欧美中文字幕在线播放| 亚洲国产精品久久久| 欧美美最猛性xxxxxx| 久久精品视频亚洲| 成人午夜两性视频| 欧美孕妇毛茸茸xxxx| 在线成人免费网站| 2018中文字幕一区二区三区| 国产z一区二区三区| 国精产品一区一区三区有限在线| 亚洲肉体裸体xxxx137| 欧美性猛交xxxx富婆弯腰| 欧美高跟鞋交xxxxxhd| 18一19gay欧美视频网站| 精品久久久久久国产| 国产亚洲福利一区| 欧美成人免费一级人片100| 色香阁99久久精品久久久| 久久免费视频在线| 精品偷拍各种wc美女嘘嘘| 岛国av一区二区在线在线观看| 国产成人在线一区二区| 亚洲乱码一区av黑人高潮| 亚洲va久久久噜噜噜久久天堂| 日韩精品在线视频美女| 欧美有码在线视频| xxx欧美精品| 亚洲精品美女网站| 亚洲曰本av电影| 91精品国产自产在线| 国产精品人成电影| 午夜免费在线观看精品视频| 久久精品国产一区二区三区| 亚洲天堂男人天堂女人天堂| 在线播放亚洲激情| 亚洲激情在线观看视频免费| 黄色一区二区在线观看| 日韩av影视综合网| 91精品免费视频| 亲子乱一区二区三区电影| 欧美性极品xxxx娇小| 日韩中文在线中文网在线观看| 久久亚洲精品小早川怜子66| 高潮白浆女日韩av免费看| 国产精品扒开腿做爽爽爽男男| 97在线免费观看| 欧美激情免费视频| 亚洲激情视频网站| 亚洲片在线观看| 91网站在线看| 欧美又大粗又爽又黄大片视频| 综合网日日天干夜夜久久| 欧美一区二区三区艳史| 欧美在线视频播放| 国产精品中文字幕久久久| 日韩精品在线免费观看视频| 亚洲国产日韩欧美综合久久| 91精品啪在线观看麻豆免费| 国产999精品久久久| 久久免费精品视频| 久久久国产视频91| 91九色在线视频| 亚洲视频免费一区| 97在线视频一区| 精品久久久久久| 欧美极品美女电影一区| 91老司机精品视频| 社区色欧美激情 | 亚洲成人a级网|