STL中的vector特點(diǎn)是: 其容量在需要時(shí)可以自動(dòng)分配,本質(zhì)上是數(shù)組形式的存儲(chǔ)方式。即在索引可以在常數(shù)時(shí)間內(nèi)完成。缺點(diǎn)是在插入或者刪除一項(xiàng)時(shí),需要線性時(shí)間。但是在尾部插入或者刪除,是常數(shù)時(shí)間的。
STL的 list 是雙向鏈表:如果知道位置,在其中進(jìn)行插入和刪除操作時(shí),是常數(shù)時(shí)間的。索引則需要線性時(shí)間(和單鏈表一樣)。
vector 和 list 都支持在常量的時(shí)間內(nèi)在容器的末尾添加或者刪除項(xiàng),vector和list都支持在常量的時(shí)間內(nèi)訪問表的前端的項(xiàng).
vector會(huì)一次分配多個(gè)元素內(nèi)存,那么下次增加時(shí),只是改寫內(nèi)存而已,就不會(huì)再分配內(nèi)存了,但是list每次只分配一個(gè)元素的內(nèi)存,每次增加一個(gè)元素時(shí),都會(huì)執(zhí)行一次內(nèi)存分配行為。如果是大量數(shù)據(jù)追加,建議使用list,因?yàn)関ector 在有大量元素,并且內(nèi)存已滿,再pushback元素時(shí),需要分配大塊內(nèi)存并把已經(jīng)有的數(shù)據(jù)move到新分配的內(nèi)存中去(vector不能加入不可復(fù)制元素)然后再釋放原來的內(nèi)存塊,這些操作很耗時(shí)。而list的性能而會(huì)始終于一的,不會(huì)出現(xiàn)vector的性能變化情況,所以對(duì)于容器構(gòu)件,需要用什么類型最好,取決于業(yè)務(wù)邏輯。