Re: [问题] 在特定条件下,deque与vector的效能比较

楼主: yoco (眠月)   2016-03-06 21:31:04
想到一个有趣的东西
std::stack 其实是个包装品,底下是包装别的容器
有趣的是他底层默认的 container
template<
class T,
class Container = std::deque<T>
> class stack;
是时间复杂度常数项比较高的 std::deque
而不是常数项复杂度比较低的 std::vector
OK,stack 不需要 random access,所以不用 std::vector 好像也没关系
但讲到 stack,一般想到的底层应该都会是类似 linked list 的实作
可是 std::stack 底下用的也不是 std::list
原因在于 std::vector 每次需要长大的时候
需要重新重新配置内存,也需要拷贝本来容器里面的元素
而 std::list 虽然不用拷贝本来容器里面的元素
但是每 push 一个元素都要动态内存配置,就慢了
std::deque 既不用拷贝原有元素
动态内存配置也久久才需要一次,不错不错
虽然每 push 一个,再不需要成长的时候比 std::vector 慢 qq
好像太浅了,没什么分享到,大家应该都知道答案
作者: Caesar08 (Caesar)   2016-03-06 21:53:00
既然不需要成长,你怎么知道push比较慢呢?deque与vector都有一个last(end)指向最后一个所以push的时候,都可以直接存取要放入的那一个然后我们就发现priority_queue的default是vector...
楼主: yoco (眠月)   2016-03-06 22:02:00
对不起我的错,刚刚脑袋不知道去哪了..刚刚想到 random access 比较慢,不知道为什么接错线qriority queue 用 vector 倒是很合理,因为他需要 random a
作者: Caesar08 (Caesar)   2016-03-06 22:59:00
ccess
作者: pikachu2421 (皮卡@めぐ民)   2016-03-06 23:19:00
这上面的接字XDD

Links booklink

Contact Us: admin [ a t ] ucptt.com