假设我的输入大小为n,这些n个元素被推送到矢量上。
我最近开始学习空间复杂性,但我有点困惑。所以它关注内存使用情况,但这是动态分配的内存吗?
vector<int> v;
虽然这不使用“new”关键字,但我读到的向量实际上是在推送时动态分配的,所以这是否意味着空间复杂度只是O(n)?
答案 0 :(得分:2)
是的,std::vector
的空间复杂度在其size()
(或实际上为capacity()
)中是线性的。请注意,虽然std::vector
对象本身可以静态或动态分配,但其数据内容将始终动态分配。 (正如@DyP在评论中指出的,分配实际发生的方式取决于您用于向量的分配器。但默认分配器使用动态分配。)
答案 1 :(得分:0)
std :: vector的空间复杂度在其大小上是线性的,因为底层结构是C-array。
但是,当你声明
时std::vector<int> v;
构造一个空容器。如果发生重新分配,则重新分配本身在整个大小上都是线性的。
如果您事先知道数组的大小,可以使用reserve()以便在每次使用push_back()
插入元素时(隐式)重新分配。