C++创建数组

Dan*_*nny 10 c++ arrays

为什么我不能这样做:

int size = menu.size;
int list[size];
Run Code Online (Sandbox Code Playgroud)

反正在这周围而不是使用向量?(数组更快,所以我想使用数组)

谢谢

Cam*_*ron 14

大小必须在编译时知道,因为编译器需要知道需要多少堆栈空间来为其分配足够的内存.(编辑:我指正在C中,可变长度数组可以在栈上分配C++不允许可变长度数组,但是..)

但是,您可以在运行时在堆上创建数组:

int* list = new int[size];
Run Code Online (Sandbox Code Playgroud)

只要确保在完成后释放内存,否则会导致内存泄漏:

delete [] list;
Run Code Online (Sandbox Code Playgroud)

请注意,很容易意外地创建内存泄漏,并且矢量几乎肯定更容易使用和维护.向量非常快(特别是如果reserve()它们首先是正确的大小),我强烈建议使用向量而不是手动内存管理.

一般而言,分析代码以找出真正的瓶颈所在而不是预先进行微量优化是个好主意(因为优化并不总是优化).


Dav*_*nan 6

正如其他人所说,C++语言设计者已经选择不允许可变长度数组,即VGA,尽管它们在C99中可用.但是,如果您准备自己做更多的工作,并且您只是急于在堆栈上分配内存,那么您可以使用alloca().

那就是说,我个人会用std::vector.它更简单,更安全,更易于维护,而且可能足够快.

  • +1 alloca()是答案,如果你真的,真的想在C++运行时在堆栈上分配动态大小的数组.但请注意.... Stack Overflow!*喘气* (2认同)