1.vector資料結構
vector和陣列類似,擁有一段連續的記憶體空間,並且起始位址不變。
因此能高效的進行隨機訪問,時間複雜度為o(1);
但因為記憶體空間是連續的,所以在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o(n)。
另外,當陣列中記憶體空間不夠時,會重新申請一塊記憶體空間並進行記憶體拷貝。
2.list資料結構
list是由雙向鍊錶實現的,因此記憶體空間是不連續的。
只能通過指標訪問資料,所以list的隨機訪問非常沒有效率,時間複雜度為o(n);
但由於鍊錶的特點,能高效地進行插入和刪除。
3.vector和list的區別
我們看乙個簡單的vector和list使用示例:
#include#include#includeusing namespace std;int main()
cout<
list::iterator itl=l.begin();
itv = itv+2;
//itl=itl+2; //編譯錯誤,list::iterator沒有過載+
itl++; //list::iterator中過載了++,只能使用++進行迭代訪問。
itl++;
cout<
vector擁有一段連續的記憶體空間,能很好的支援隨機訪問,
因此vector::iterator支援「+」,「+=」,「
list的記憶體空間可以是不連續,它不支援隨機訪問,
因此list::iterator則不支援「+」、「+=」、「
vector::iterator和list::iterator都過載了「++」運算子。
總之,如果需要高效的隨機訪問,而不在乎插入和刪除的效率,使用vector;
如果需要大量的插入和刪除,而不關心隨機訪問,則應使用list。
wj:每天努力一點點,你總會成功的。
標籤:
c++,
stl
list和vector的區別
vector和built in陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能夠非常好的支援隨機訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝。另外,當該陣列後的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體的拷貝。這些都大大...
list和vector的區別
vector和動態陣列類似,擁有一段連續的記憶體空間,能高效的進行隨機訪問,時間複雜度為o 1 但在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o n 2.list資料結構 list是由雙向鍊錶實現的,記憶體空間是不連續的。訪問資料時間複雜度為o n 但能高效地進行插入和刪除。已知元素是...
vector和list的區別
1.vector的底層實現是順序表,在記憶體中是一串連續的空間 2.list的底層實現是帶頭節點的雙向迴圈鍊錶,在記憶體中不是一串連續的空間 1.vector支援隨機訪問,通過下標精準定位到乙個元素,訪問元素的時間複雜度是o 1 2.list不支援隨機訪問,想要訪問某乙個元素只能遍歷整個鍊錶,訪問元...