将n个元素推到向量上的空间复杂性

时间:2013-12-06 14:49:15

标签: c++ algorithm vector

假设我的输入大小为n,这些n个元素被推送到矢量上。

我最近开始学习空间复杂性,但我有点困惑。所以它关注内存使用情况,但这是动态分配的内存吗?

vector<int> v; 

虽然这不使用“new”关键字,但我读到的向量实际上是在推送时动态分配的,所以这是否意味着空间复杂度只是O(n)?

2 个答案:

答案 0 :(得分:2)

是的,std::vector的空间复杂度在其size()(或实际上为capacity())中是线性的。请注意,虽然std::vector对象本身可以静态或动态分配,但其数据内容将始终动态分配。 (正如@DyP在评论中指出的,分配实际发生的方式取决于您用于向量的分配器。但默认分配器使用动态分配。)

答案 1 :(得分:0)

std :: vector的空间复杂度在其大小上是线性的,因为底层结构是C-array。

但是,当你声明

std::vector<int> v;

构造一个空容器。如果发生重新分配,则重新分配本身在整个大小上都是线性的。

如果您事先知道数组的大小,可以使用reserve()以便在每次使用push_back()插入元素时(隐式)重新分配。