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

首頁 > 編程 > C > 正文

STL常用容器詳細解析

2020-01-26 15:50:14
字體:
來源:轉載
供稿:網友

STL是C/C++開發中一個非常重要的模板,而其中定義的各種容器也是非常方便我們大家使用。下面,我們就淺談某些常用的容器。這里我們不涉及容器的基本操作之類,只是要討論一下各個容器其各自的特點。STL中的常用容器包括:順序性容器(vector、deque、list)、關聯容器(map、set)、容器適配器(queue、stac)。

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相同。

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲在线第一页| 成人免费在线网址| 91视频-88av| 亚洲国产天堂网精品网站| 国产精品男人爽免费视频1| 亚洲国产精品va在线观看黑人| 精品夜色国产国偷在线| 亚洲乱码一区av黑人高潮| 中文字幕亚洲无线码a| 午夜精品一区二区三区在线视频| 成人在线免费观看视视频| 国产精品ⅴa在线观看h| 国产91ⅴ在线精品免费观看| 久久精品视频在线| 亚洲а∨天堂久久精品9966| 国产精品福利在线观看网址| 欧美精品免费看| 亚洲欧美综合图区| 亚洲国产精品网站| 久热精品视频在线观看一区| 久久夜色精品亚洲噜噜国产mv| 欧美日韩另类字幕中文| 日韩乱码在线视频| 亚洲精选中文字幕| 日韩精品在线观看网站| 好吊成人免视频| 欧美日韩国产一区在线| 日韩在线欧美在线| 国产97人人超碰caoprom| 国产日韩视频在线观看| 成人性生交大片免费观看嘿嘿视频| 欧美成人免费大片| 亚洲精品视频在线播放| 久久伊人精品视频| 成人羞羞国产免费| 亚洲精品ady| 57pao成人国产永久免费| 日韩av在线播放资源| 亚洲第一视频在线观看| 亚洲欧美中文日韩v在线观看| 亚洲福利在线观看| 久久精品国产综合| 久久国产精品首页| 久久视频精品在线| 亚洲日本成人女熟在线观看| 国产在线视频2019最新视频| 欧美主播福利视频| 91嫩草在线视频| 国产精品草莓在线免费观看| 欧美夫妻性生活xx| 成人性生交大片免费看视频直播| 国产亚洲精品久久| 日韩国产在线看| 久久久久久久久综合| 自拍偷拍亚洲欧美| 欧美日本高清视频| 91精品久久久久久久久| 亚洲精品久久久久中文字幕二区| 欧美国产亚洲视频| 国产精品一区二区久久| 91福利视频网| 精品久久久久久亚洲国产300| 国模视频一区二区三区| 日韩欧美国产高清91| 国产精品日韩一区| 亚洲国产精彩中文乱码av| 视频在线观看99| 亚洲精品成人久久久| 91av在线免费观看视频| 日韩av中文字幕在线| 欧洲美女7788成人免费视频| 精品中文字幕视频| 欧美激情国内偷拍| 国产亚洲欧洲高清| 日韩一区二区欧美| 久久韩国免费视频| 成人av在线网址| 欧美国产激情18| 欧美一区二区视频97| 色婷婷亚洲mv天堂mv在影片| yellow中文字幕久久| 毛片精品免费在线观看| 亚洲国产精久久久久久| 成人av电影天堂| 国产精品美女无圣光视频| 欧美极品美女电影一区| 在线播放国产一区二区三区| 国产亚洲精品久久久优势| 青青久久av北条麻妃海外网| 欧美日韩精品在线视频| 2019国产精品自在线拍国产不卡| 最近2019中文免费高清视频观看www99| 久久精品欧美视频| 91国内免费在线视频| 日韩在线免费高清视频| 中文字幕亚洲综合| 好吊成人免视频| 亚洲自拍偷拍一区| 中文字幕欧美在线| 日产精品久久久一区二区福利| 欧洲美女7788成人免费视频| 国产精品久久久久久久久久久久久| 欧美在线不卡区| 性日韩欧美在线视频| 另类图片亚洲另类| 国产精品自拍偷拍视频| 久久国产精品久久久| 亚洲欧美精品一区二区| 91久久精品美女高潮| 久久香蕉国产线看观看网| 欧美日韩一区二区在线| 国产精品18久久久久久首页狼| 国外成人在线播放| 97在线免费观看| 97国产真实伦对白精彩视频8| 国产精品福利在线观看| xxxx欧美18另类的高清| 国产日韩欧美自拍| 国产欧美亚洲精品| 中文字幕欧美日韩精品| 久久综合色88| 欧美日本在线视频中文字字幕| 久久亚洲精品成人| 激情懂色av一区av二区av| 亚洲成年网站在线观看| 国产日产久久高清欧美一区| 久久视频在线看| 91精品国产乱码久久久久久久久| 97精品欧美一区二区三区| 91视频免费网站| 国产成人精品最新| 亚洲精品国产综合区久久久久久久| 精品日韩视频在线观看| 日韩电影网在线| 亚洲成人1234| 精品国产一区二区三区久久狼黑人| 欧美精品日韩www.p站| 亚洲a中文字幕| 日本精品久久久| 久久精视频免费在线久久完整在线看| 九色精品免费永久在线| 精品欧美国产一区二区三区| 欧美极品少妇xxxxⅹ免费视频| 高清亚洲成在人网站天堂| 国产亚洲aⅴaaaaaa毛片| 国产精品99蜜臀久久不卡二区| 欧美日韩免费观看中文| 国产亚洲精品日韩| 欧美日韩加勒比精品一区| 91丨九色丨国产在线| 国产91精品久久久久| 57pao成人永久免费视频| 亚洲最大福利视频网| 欧美成人免费在线观看| 一本一本久久a久久精品综合小说| 日韩av影片在线观看| 欧美在线精品免播放器视频| 色哟哟网站入口亚洲精品| 91亚洲国产成人精品性色| 国产在线精品成人一区二区三区| 国产免费一区二区三区在线能观看| 不卡av电影在线观看| 久久夜色精品国产亚洲aⅴ| 国产精品精品视频一区二区三区|