读书人

stl:deque在尾部push_back不会导致rea

发布时间: 2012-03-31 13:13:26 作者: rapoo

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都要优呢?
随机存储,连续存……

读书人网 >C++

热点推荐