**
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<<"v[2]="<::iterator itv=v.begin();
list::iterator itl=l.begin();
itv = itv+2;
//itl=itl+2; //編譯錯誤,list::iterator沒有過載+
itl++; //list::iterator中過載了++,只能使用++進行迭代訪問。
itl++;
cout<<*itv因此vector::iterator支援「+」,「+=」,「<」等操作符。
list的記憶體空間可以是不連續,它不支援隨機訪問,
因此list::iterator則不支援「+」、「+=」、「<」等
vector::iterator和list::iterator都過載了「++」運算子。
總之,如果需要高效的隨機訪問,而不在乎插入和刪除的效率,使用vector;
如果需要大量的插入和刪除,而不關心隨機訪問,則應使用list。
c 中vector與list的區別
c 標準庫中,容器vector和list都可以用來存放一組型別相同的資料。而且二者不同於陣列的一點是,支援動態增長。但它們還是有有幾點不同 1 vector是順序表,表示的是一塊連續的記憶體,元素被順序儲存 list是雙向連線表,在記憶體中不一定連續。2 當數值記憶體不夠時,vector會重新申請一...
初級練手題之list
最常用的資料結構有list list string map。我們已經練習過list和string,現在練習list,雙向鍊錶。注意雙向鍊錶有多種變形,比如非環結果雙向鍊錶,普通環行雙向鍊錶,多乙個頭節點的環行雙向鍊錶。不同的變形版本,對 的複雜度有很微妙的影響。typedef struct list...
vector與list的區別
vector與list差異點與優缺點 1 vector動態增長 不是隨著每個元素的插入而自己增長的。預先存了一些儲存區,使得實際分配的空間比當前所需的空間多一些,而list 表示非連續的記憶體區域,並通過一對指向首位元素的指標雙向鏈結起來,因而可以兩個方向進行遍歷。2 當從vector末端刪除元素的...