c++几种STL比较
STL工作和面試考的比較多了,下面整理一下。
1、Vector
變長(zhǎng)一維數(shù)組,連續(xù)存放的內(nèi)存塊,有保留內(nèi)存,堆中分配內(nèi)存;
支持[]操作,高效率的隨機(jī)訪問;
在最后增加元素時(shí),一般不需要分配內(nèi)存空間,速度快;在中間或開始操作元素時(shí)要進(jìn)行內(nèi)存拷貝效率低;
vector高效的原因在于配置了比其所容納的元素更多的內(nèi)存,內(nèi)存重新配置會(huì)花很多時(shí)間;
注:需要高效的隨即存取,而不在乎插入和刪除使用vector。
2、list
雙向鏈表,內(nèi)存空間上可能是不連續(xù)的,無保留內(nèi)存,堆中分配內(nèi)存;
不支持隨機(jī)存取,開始和結(jié)尾元素的訪問時(shí)間快,其它元素都O(n);
在任何位置安插和刪除元素速度都比較快,安插和刪除操作不會(huì)使其他元素的各個(gè)pointer,reference,iterator失效;
注:大量的插入和刪除,而不關(guān)系隨即存取使用list。
3、deque
雙端隊(duì)列,在堆上分配內(nèi)存,一個(gè)堆保存幾個(gè)元素,而堆之間使用指針連接;
支持[]操作,在首端和末端插入和刪除元素比較快,在中部插入和刪除則比較慢,像是list和vector的結(jié)合;
注:關(guān)心插入和刪除并關(guān)心隨即存取折中使用deque。
4、set&multiset
有序集合,使用平衡二叉樹存儲(chǔ),按照給定的排序規(guī)則(默認(rèn)按less排序)對(duì)set中的數(shù)據(jù)進(jìn)行排序;
set中不允許有重復(fù)元素,multiset中運(yùn)行有重復(fù)元素;
兩者不支持直接存取元素的操作;
因?yàn)槭亲詣?dòng)排序,查找元素速度比較快;
不能直接改變?cè)刂?#xff0c;否則會(huì)打亂原本正確的順序,必須先下刪除舊元素,再插入新的元素。
5、map&multimap
字典庫,一個(gè)值映射成另一個(gè)值,使用平衡二叉樹存儲(chǔ),按照給定的排序規(guī)則對(duì)map中的key值進(jìn)行排序;
map中的key值不允許重復(fù),multimap中的key允許重復(fù);
根據(jù)已知的key值查找元素比較快;
插入和刪除操作比較慢。
總結(jié)
以上是生活随笔為你收集整理的c++几种STL比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++引用的特点
- 下一篇: c++几种智能指针比较