vector與list與deque比較

2021-09-30 05:07:27 字數 1329 閱讀 2685

vector   表示一段連續的記憶體區域每個元素被順序儲存在這段記憶體中對vector   的隨機   

訪問比如先訪問元素5   然後訪問15   然後再訪問7   等等效率很高因為每次訪問離vector   

起始處的位移都是固定的但是在任意位置而不是在vector   末尾插人元素則效率很低   

因為它需要把待插入元素右邊的每個元素都拷貝一遍類似地刪除任意乙個而不是vector   

的最後乙個元素效率同樣很低因為待刪除元素右邊的每個元素都必須被複製一遍這種   

代價對於大型的複雜的類物件來說尤其大乙個deque   也表示一段連續的記憶體區域但   

是與vector   不同的是它支援高效地在其首部插入和刪除元素它通過兩級陣列結構來實   

現一級表示實際的容器第二級指向容器的首和尾   

list   表示非連續的記憶體區域並通過一對指向首尾元素的指標雙向鏈結起來從而允許   

向前和向後兩個方向進行遍歷在list   的任意位置插入和刪除元素的效率都很高指標必須   

被重新賦值但是不需要用拷貝元素來實現移動另一方面它對隨機訪問的支援並不好   

訪問乙個元素需要遍歷中間的元素另外每個元素還有兩個指標的額外空間開銷   

下面是選擇順序容器型別的一些準則   

如果我們需要隨機訪問乙個容器則vector   要比list   好得多   

如果我們已知要儲存元素的個數則vector   又是乙個比list   好的選擇   

如果我們需要的不只是在容器兩端插入和刪除元素則list   顯然要比vector   好   

除非我們需要在容器首部插入和刪除元素否則vector   要比deque   好

如果我們既需要隨機訪問元素又需要隨機插入和刪除元素那麼又該怎麼辦呢我們   

需要在隨機訪問的代價和拷貝右邊或左邊相鄰元素的代價之間進行折衷一般來說   

應該是由應用程式的主要操作查詢或插入來決定容器型別的選擇為了做這個決定   

我們可能需要知曉兩種容器型別的效能如果兩種容器型別的效能都不能夠使我們滿意   

則需要自己設計更複雜的資料結構   

當我們不知道需要儲存的元素的個數即容器需要動態增長並且不需要隨機訪問元   

素以及在首部或者中間插入元素時我們該如何決定選擇哪乙個容器型別呢在這種情況   

下list   和vector   哪乙個更有效我們將把這個問題的答案推延到下一節   

list   以簡單方式增長每當乙個新物件被插入到list   中時插入處的兩個元素的前指標和   

後指標被重新賦值為指向新物件新物件的前後指標被初始化為指向這兩個元素list   只佔   

以及通過指標進行的間接訪問  

vector與list的區別

vector與list差異點與優缺點 1 vector動態增長 不是隨著每個元素的插入而自己增長的。預先存了一些儲存區,使得實際分配的空間比當前所需的空間多一些,而list 表示非連續的記憶體區域,並通過一對指向首位元素的指標雙向鏈結起來,因而可以兩個方向進行遍歷。2 當從vector末端刪除元素的...

vector與list的區別

vector 連續儲存的容器,動態陣列,在堆上分配空間 底層實現 陣列 兩倍容量增長 vector 增加 插入 新元素時,如果未超過當時的容量,則還有剩餘空間,那麼直接新增到最後 插入指定位置 然後調整迭代器。如果沒有剩餘空間了,則會重新配置原有元素個數的兩倍空間,然後將原空間元素通過複製的方式初始...

vector與list的區別

1 vector vector的底層實現是陣列,它擁有一段連續的記憶體空間,並且起始位址不變,因此訪問的效率較高。由於他的記憶體空間是連續的,所以在中間進行插入和刪除的操作時,會造成記憶體塊的拷貝,在空間不夠的情況下,需要申請一塊最夠大的記憶體並進行記憶體的拷貝,也是基於這也原因,在vetcor的插...