deque用法 和與vector的區別

2025-03-13 13:00:04 字數 3491 閱讀 5385

1樓:網友

deque與vector的慎哪敗主要不同之處在於:

1. 兩端都能快速安插和刪除元素,這些操作可以在分期攤還的常數時間(amortized constant time)內完成。

2. 元素的存取和迭代器的動作比vector稍慢。

3. 迭代器需要在不同區塊間跳轉,所以它非一般指標。

4. 因為deque使用不止一塊記憶體(而vector必須使用一塊連續記憶體),所緩雹以deque的max_size()可能更大。

5. 不支援對容量和記憶體重新分配時機的控制。不過deque的記憶體重分配優於vector,因為其內部結構顯示,deque不必在記憶體重分配時複製所有元素。

6. 除了頭尾兩端,在任何地方安插或刪除元素,都將導致指向deque元素的所有pointers、references、iterators失寬顫效。

7. deque的記憶體區塊不再被使用時,會自動被釋放。deque的記憶體大小是可自動縮減的。

8. deque與vector組織記憶體的方式不一樣。在底層,deque按「頁」(page)或「塊」(chunk)來分配儲存器,每頁包含固定數目的元素。

而vector只分配一塊連續的記憶體。例如,乙個10m位元組的vector使用的是一整塊10m位元組的記憶體,而deque可以使用一串更小的記憶體塊,比如10塊1m的記憶體。所以不能將deque的位址(如&deque[0])傳遞給傳統的c api,因為deque內部所使用的記憶體不一定會連續。

deque的下述特性與vector差不多:

1. 在中部安插、刪除元素的速度較慢。

2. 迭代器屬於random access iterator(隨機存取迭代器)。

優先使用vector,還是deque?

c++標準建議:vector是那種應該在預設情況下使用的序列。如果大多數插入和刪除操作發生在序列的頭部或尾部時,應該選用deque。

使用deque還需注意:

1. 除了at(),其它成員函式均不會檢查索引或迭代器是否有效。

2. 任何插入或刪除動作都會使所有指向deque元素的pointers、references、iteartors失效,唯一例外的是在頭部或尾部插入元素(此時pointers和references仍然有效,但iterators失效)。

vector、list、deque區別

2樓:機器

連續儲存結構,每個元素在記憶體上是連續的;支援高效的隨機訪問和在尾端插入/刪除操作,但其他位置的插入/刪除操作效率低下,可以動態擴充,但是擴充過程效率不高,所以可以通過函式控制擴充機制。

非連續儲存結構,具有雙連結串列結構,每個元素維護一對前向和後向指標,因此支援前向/後向遍歷,支援高效的隨機插入/刪除操作,但隨機訪問效率低下

優點:(1) 不使用連續記憶體完成動態操作。

2) 在內部方便的進行插入和刪除操作。

3) 可在兩端進行push、pop

缺點:(1) 不能進行內部的隨機訪問,即不支援[ ]操作符和(2) 相對於verctor佔用記憶體多。

連續儲存結構,即其每個元素在記憶體上也是連續的,類似於vector,不同之處在於,deque提供了兩級陣列結構, 第一級完全類似於vector,代表實際容器;另一級維護容器的首位位址。這樣,deque除了具有vector的所有功能外,還支援高效的首/尾端插入/刪除操作

deque 雙端佇列 double-end queuedeque是在功能上合併了vector和list優點:(1) 隨機訪問方便,即支援[ ]操作符和(2) 在內部方便的進行插入和刪除操作。

3) 可在兩端進行push、pop

缺點:佔用記憶體多。

c++,list,vector,deque有什麼區別

3樓:匿名使用者

vector:c++容器模板中的大哥大,就像是乙個加強版的佇列,之所以這樣說,是因為它不但有佇列形式的索引,還能動態的新增擴充。特點:

把被包含的物件以陣列的形式儲存,支援索引形式的訪問(這種訪問速度奇快無比)。但由此也產生了乙個問題,由於資料儲存形式的固定化,你如果想在他中間部位insert物件的話,搞不好會讓你吃盡頭。因為他在分配空間的時候,可是成塊分配的連續空間。

deque:英文「double-ended-queue」。名如其人,這是c++有序容器中聞名遐邇的雙向佇列。

他在設計之初,就為從兩端新增和刪除元素做了特殊的優化。同樣也支援隨即訪問,也有類似vector的[ ]操作符,但不要因此就把他和vector混為一潭。特點:

從本質上講,他在分配記憶體的時候,使用了map的結構和方法。化整為零,分配了許多小的連續空間,因此,從deque兩端新增、刪除元素是十分方便的。最重要的一點:

如果在不知道記憶體具體需求的時候,使用deque絕對是比vector好的。

list:模板中的雙向連結串列。設計他的目的可能就是為了在容器中間插入、刪除吧,所以有得比有失,他的隨機訪問速度可不敢恭維。

而且沒有[ ]操作。特點:隨機的插入、刪除元素,在速度上佔有明顯的優勢。

並且,由於記憶體分配不連續,他對插入的要求也十分的低。所以在使用大物件的時候,這可是乙個不錯的選擇。「

list,vector和deque的區別

4樓:山東中公優就業

一、vector 向量相當於乙個陣列。在記憶體中分配一塊連續的記憶體空間進行儲存,支援補丁大小的儲存。當超過已分配的空間是,會整體重新分配一塊記憶體進行儲存。

優點

1、不指定一塊連續記憶體進行儲存,可以像陣列一樣操作。

2、隨機訪問方便,支援下標訪問和操作。

3、節省空間。

缺點

1、在內部進行插入刪除,效率較低。

2、只能在末端進行pop和push。

3、當動態長度超過預設分配大小後,要整體重新分配、拷貝和施放。

二、list 雙向連結串列。每個結點都包含乙個資訊塊info、乙個前驅指標pre和乙個後驅指標post。可不比分配必須的大小,方便的進行插入刪除操作。

使用的是非連續的 記憶體空間進行儲存。

優點

1、不適用連續記憶體完成動態操作。

2、在內部方便進行插入刪除操作。

3、可在兩端進行push和pop操作。

缺點

1、不支援隨機訪問,即下標操作和。at()。

2、相對於vector佔用記憶體多。

三、deque雙向佇列,在功能上合併了vector和list。

優點

1、支援隨機訪問。

2、可以再兩端進行push和pop操作。

3、在內部方便進行插入和刪除操作。

缺點

佔用記憶體較多。

whether用法與用法區別

whether 是否 引導賓語從句 可以與 if 互換。但用於介詞後,與動詞不定式連用只能用whether whether的用法 benot certain whether.不能確定是否。confirm whether youare understanding.確認對方是否聽清。feelwhethe...

forbiddenbanned用法與區別

都是禁止 但banned是指法律性質的禁令 forbidden和banned有什麼區別 10 forbidden和banned有什麼區別懸賞分 10 離問題結束還有 14 天 17 小時 提問者 我想說 賭博在大陸是絕 forbidden的用法是什麼 forbidden可以作為動詞,是forbid ...

的用法和作用, 的用法和意思?

1,作間投助詞 皆 意見 早 所以呀 把大家的意見啊,都快點總結出來。口語中的 的 等同於 如 不是這個嗎?助動詞這個用法現在只存在於老年用語和西部方言裡。接續 接體言,副詞,形容動詞詞幹,以及動詞,形容詞 型助動詞 終止型後,可後續終助詞 等 1.表示肯定判斷,相當於 刀 殿 形見 這把刀是老爺的...