| 企服解答
vector和list的區(qū)別是List封裝了鏈表,Vector封裝了數(shù)組,vector是使用連續(xù)內(nèi)存存儲的,它支持[]運算符,而list是以鏈表形式實現(xiàn)的,不支持[]。
vector和list的區(qū)別
Vector對于隨機(jī)訪問的速度很快,但是對于插入尤其是在頭部插入元素速度很慢,在尾部插入速度很快。
List對于隨機(jī)訪問速度慢得多,因為可能要遍歷整個鏈表才能做到,但是對于插入就快的多了,不需要拷貝和移動數(shù)據(jù),只需要改變指針的指向就可以了。
另外對于新添加的元素,Vector有一套算法,而List可以任意加入。
| 擴(kuò)展閱讀
vector:
向量,相當(dāng)于一個數(shù)組。
在內(nèi)存中分配一塊連續(xù)的內(nèi)存空間進(jìn)行存儲。支持不指定vector大小的存儲。STL內(nèi)部實現(xiàn)時,首先分配一個非常大的內(nèi)存空間預(yù)備進(jìn)行存儲,即capacituy()函數(shù)返回的大小,當(dāng)超過此分配的空間時再整體重新放分配一塊內(nèi)存存儲,這給人以vector可以不指定vector即一個連續(xù)內(nèi)存的大小的感覺。通常此默認(rèn)的內(nèi)存分配能完成大部分情況下的存儲。
優(yōu)點:
1、不指定一塊內(nèi)存大小的數(shù)組的連續(xù)存儲,即可以像數(shù)組一樣操作,但可以對此數(shù)組進(jìn)行動態(tài)操作。通常體現(xiàn)在push_back() pop_back()
2、隨機(jī)訪問方便,即支持[ ]操作符和vector.at()
3、節(jié)省空間。
缺點:
1、在內(nèi)部進(jìn)行插入刪除操作效率低。
2、只能在vector的最后進(jìn)行push和pop,不能在vector的頭進(jìn)行push和pop。
3、當(dāng)動態(tài)添加的數(shù)據(jù)超過vector默認(rèn)分配的大小時要進(jìn)行整體的重新分配、拷貝與釋放。
list:
雙向鏈表。
每一個結(jié)點都包括一個信息快Info、一個前驅(qū)指針Pre、一個后驅(qū)指針Post。可以不分配必須的內(nèi)存大小方便的進(jìn)行添加和刪除操作。使用的是非連續(xù)的內(nèi)存空間進(jìn)行存儲。
優(yōu)點:
1、不使用連續(xù)內(nèi)存完成動態(tài)操作。
2、在內(nèi)部方便的進(jìn)行插入和刪除操作。
3、可在兩端進(jìn)行push、pop。
缺點:
1、不能進(jìn)行內(nèi)部的隨機(jī)訪問,即不支持[ ]操作符和vector.at()
2、相對于verctor占用內(nèi)存多。
[免責(zé)聲明]
文章標(biāo)題: vector和list的區(qū)別
文章內(nèi)容為網(wǎng)站編輯整理發(fā)布,僅供學(xué)習(xí)與參考,不代表本網(wǎng)站贊同其觀點和對其真實性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時溝通。發(fā)送郵件至36dianping@36kr.com,我們會在3個工作日內(nèi)處理。