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