deque用法和与vector的区别?
2019-10-28

deque与vector的主要不同之处在于:

1.两端都能快速安插和删除元素,这些操作可以在分期摊还的常数时间(amortizedconstanttime)内完成。

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])传递给传统的CAPI,因为deque内部所使用的内存不一定会连续。

deque的下述特性与vector差不多:1.在中部安插、删除元素的速度较慢。2.迭代器属于randomaccessiterator(随机存取迭代器)。

优先使用vector,还是dequec++标准建议:vector是那种应该在默认情况下使用的序列。如果大多数插入和删除操作发生在序列的头部或尾部时,应该选用deque。

使用deque还需注意:1.除了at(),其它成员函数均不会检查索引或迭代器是否有效。2.任何插入或删除动作都会使所有指向deque元素的pointers、references、iteartors失效,唯一例外的是在头部或尾部插入元素(此时pointers和references仍然有效,但iterators失效)。

大家都在看
本站系本网编辑转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除内容!本站文章版权归原作者所有,内容为作者个人观点。本站只提供参考并不构成任何投资及应用建议。本站拥有对此声明的最终解释权。