日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

deque与vector的主要区别

發布時間:2024/4/11 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 deque与vector的主要区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

deque與vector非常相似。它也采用動態數組管理元素,提供隨機存取,有著和vector幾乎一樣的接口。不同的是deque的動態數組頭尾都開放,因此能在頭尾兩端進行快速安插和刪除。


deque通常實作為一組獨立區塊,第一區塊朝某方向擴展,最后一個區塊朝另一個方向擴展。


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失效)。

總結

以上是生活随笔為你收集整理的deque与vector的主要区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。