vector與 list與 deque的比較

2021-06-03 14:52:21 字數 1687 閱讀 6505

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

有其包含的元素所必需的儲存區額外的開銷有兩個方面與每個值相關聯的兩個附加指標   

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

vector與list與deque比較

vector 表示一段連續的記憶體區域每個元素被順序儲存在這段記憶體中對vector 的隨機 訪問比如先訪問元素5 然後訪問15 然後再訪問7 等等效率很高因為每次訪問離vector 起始處的位移都是固定的但是在任意位置而不是在vector 末尾插人元素則效率很低 因為它需要把待插入元素右邊的每個元...

vector與list的區別

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

vector與list的區別

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