【发布时间】:2013-12-06 14:49:15
【问题描述】:
假设我的输入大小为 n,这些 n 个元素被推送到一个向量上。
我最近开始学习空间复杂性,但我有点困惑。所以它看的是内存使用情况,但这是动态分配的内存?
vector<int> v;
虽然这没有使用“new”关键字,但我读到一个向量实际上是在你推送时动态分配的,所以这是否意味着空间复杂度只是 O(n)?
【问题讨论】:
-
vector<int> v;声明了一个 vector类型的对象 v 而没有传递任何构造函数参数。这意味着它调用默认构造函数 (cplusplus.com/reference/vector/vector/vector),它分配一个 0 大小的向量。它可能会在内部调用 new int[0];(这是一个有效的new调用)。 -
另外,如果你知道你会有 n 个元素,你最好(而不是推动)以 n 大小开始向量(调整大小,或使用 1 参数构造函数),然后把中的元素就好像向量是一个
int[]数组一样。 -
@leewangzhong 一个大小为零的向量并不意味着一个容量为 0 的向量。 IIRC,实现可以为默认ctor创建容量> 0。
-
我的观点是,即使你不从任何元素开始,它也可能会调用 new。