向量与动态数组

时间:2017-08-19 18:19:00

标签: c++ arrays vector

我发现可以在C ++中动态初始化数组。  我的意思是:

int n;
int ar[n];

工作正常。

那么这个和向量之间有什么区别?

1 个答案:

答案 0 :(得分:0)

一方面是C ++标准不支持VLA(和int arr[n] n不是constexpr是一个可变长度数组)。因此,即使某些编译器接受它,它至少也不可移植。

另一件事是vector可以动态调整它的大小,即按需“增加”,你可以让它缩小。这对于VLA来说是不可能的,因为 - 一旦为特定的n定义,就会根据n元素分配内存,之后不再增长或缩小。

此外,VLA的典型使用很有可能在堆栈上分配,与堆相比,它的大小相当有限。向量在堆上分配内存,因此它们通常可以变得更大。因此,对于VLA,您可能会遇到n的内存问题,您可能会明显没有向量的问题。例如,尝试int n=100000; int arr[n]; arr[100]=0,看看会发生什么。