stl:deque在尾部push_back不会导致realloc么?解决办法

stl::deque在尾部push_back不会导致realloc么?
《Effective STL》里面说,deque的性质为头尾操作做了优化,例如尾部的插入操作不会像vector那样导致重新分配内存和内容搬移。

可是,既然deque可以不断的增大(用push_back),那么总会增长到需要再次分配内存的时候啊。而且,只要有realloc的操作,就常常会有内存搬移的动作(虽然realloc不一定导致内存搬移)。这个东西不可避免啊。

C++标准有没有规定deque应该如何的实现呢,如果没有规定如何实现,那么和vector又有什么区别,都支持随机访问?

------解决方案--------------------
标准没有规定如何实现。支持随机访问,是因为deque将内存一段段的衔接起来的。下标访问一般是先确定在哪个段,然后再确定在这个段的具体位置。
------解决方案--------------------
说白了就是多个数组像火车车厢一样连在一起,每节车厢可以座N个人,尾部座满了再加节车厢(新分配内存),又可以座N个人,
弹出也一样,没有必要内存搬移
------解决方案--------------------
楼主可以看看 侯捷的深入解析stl
deque实现和vector不一样的,他在内部是有分块的,然后块与块之间用指针连起来,如果到达尾端,会分配一块新的块,不会做内存迁移
------解决方案--------------------
别忘了队列的基本特性是什么
------解决方案--------------------
探讨

引用:

楼主可以看看 侯捷的深入解析stl
deque实现和vector不一样的,他在内部是有分块的,然后块与块之间用指针连起来,如果到达尾端,会分配一块新的块,不会做内存迁移


那么,在什么应用场合下,deque比vector和list都要优呢?
随机存储,连续存储用vector,链表用list.
好像deque并没有存在的必要啊

------解决方案--------------------
deque用作队列的吧,在前后插入删除非常方便,不需要移动数据,能随机访问吧。
------解决方案--------------------
探讨

引用:

引用:

引用:

楼主可以看看 侯捷的深入解析stl
deque实现和vector不一样的,他在内部是有分块的,然后块与块之间用指针连起来,如果到达尾端,会分配一块新的块,不会做内存迁移


那么,在什么应用场合下,deque比vector和list都要优呢?
随机存储,连续存储用vector,链表用list……

------解决方案--------------------
你为什么非得从中间删除元素呢?如果你有这样的需求 那你应该使用list这样的数据结构
------解决方案--------------------
探讨

引用:

引用:

引用:

引用:

楼主可以看看 侯捷的深入解析stl
deque实现和vector不一样的,他在内部是有分块的,然后块与块之间用指针连起来,如果到达尾端,会分配一块新的块,不会做内存迁移


那么,在什么应用场合下,deque比vector和list都要优呢?
随机存储,连续存……