C++ 向量push_-back的空间复杂度

C++ 向量push_-back的空间复杂度,c++,data-structures,space,space-complexity,C++,Data Structures,Space,Space Complexity,我有一段代码,它首先创建了一个向量B。 然后,我的代码循环遍历程序中的另一个向量a,并将该索引添加到向量B的后面 我的想法是,因为我们在n个元素之间循环,所以^2的时间复杂度会更差,因为如果向量b太大,我们可能需要创建一个全新的数组。自回推以来的平均开启时间通常是恒定的 现在,对于空间复杂性,因为我们已经创建了容纳n个元素的空间,所以它将处于启用状态。然而,如果我们的向量太大,我们可能需要创建一个大小完全相同的全新向量。那么我们的空间是O2n,它是开的还是+m,m是新阵列的大小 谢谢 关于时间复

我有一段代码,它首先创建了一个向量B。 然后,我的代码循环遍历程序中的另一个向量a,并将该索引添加到向量B的后面

我的想法是,因为我们在n个元素之间循环,所以^2的时间复杂度会更差,因为如果向量b太大,我们可能需要创建一个全新的数组。自回推以来的平均开启时间通常是恒定的

现在,对于空间复杂性,因为我们已经创建了容纳n个元素的空间,所以它将处于启用状态。然而,如果我们的向量太大,我们可能需要创建一个大小完全相同的全新向量。那么我们的空间是O2n,它是开的还是+m,m是新阵列的大小


谢谢

关于时间复杂性:

单次回推的最坏情况是线性的,除非内存是预先保留的,在这种情况下,最坏情况是恒定的,只要大小不超过保留的大小。平均情况不变

无论内存是否被保留,N个推回总数的最坏和平均情况都是线性的

那么我们的空间是O2n,它是开的还是+m,m是新阵列的大小


这实际上并不重要。新的大小是旧大小的常数倍数c,因此依次执行+m->On+n*c->OC+1*n->On。因此,无论哪种方式,复杂性都是相同的。

无关:您的时间复杂性是不正确的。推回就是。通常有额外的空间,没有额外的工作,项目被插入到一个迭代中。当需要额外的空间时,可能会有一个ON-copy循环,而不是^2。因此,我们已经处于一个n个循环中,当我们尝试在满时将_推回时,可能需要n个时间来复制元素,那么为什么我们不将for循环中的操作乘以for循环的时间呢?给我们n^2没有n的循环。向量准确地知道端点的位置,可以直接插入O1。不需要搜索。即使它确实需要搜索,那也会打开搜索,然后再打开另一个,完全分开,然后复制到新的分配,2个ONs仍然打开。在^2上意味着对于搜索循环中的每个迭代,程序都会复制整个向量。O1意味着无论N有多大,您只访问一个元素。ON表示您访问N个元素中的每一个元素的次数不变。ON^2表示访问N个元素中的每一个元素N次,可能是一个常量。这对你来说意味着,如果你用O1乘以N,你做的功是相同的。如果你把N加上ON,你的工作量就加倍了。在^2上,如果你加倍N,你的工作量将增加四倍。谢谢。我的空间复杂性分析似乎正确吗?