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