【发布时间】:2020-11-08 04:02:53
【问题描述】:
我了解到动态数组(例如 std::vector)在达到其容量时会使其容量翻倍,以使 push_back 操作的摊销时间为 O(1)。
但是,为什么首先需要这样做?不是在vector 的末尾为一个元素分配空间并在那里复制新元素已经 O(1) 了吗?
【问题讨论】:
-
注:底层容量翻倍不常用;它过于激进,并且很可能最终导致过多的内存浪费。从长远来看,它几乎总是一种计算方式,表现为某种乘数,但没有 2 倍那么高。 1.3x 或 1.5x 等得到相同的摊销
O(1)而不会浪费内存。 -
请注意,计算机是懒惰的,你会发现它们在做各种各样的事情,比如“是的,我可以扩展那块内存!”一个好的
vector实现将在它发生时利用这一点。
标签: c++ arrays vector time-complexity