2016-09-29 52 views
0

我一直在寻找在这个算法中,第二个:动态规划解C++动态数组。为什么这个工作?

http://www.geeksforgeeks.org/dynamic-programming-set-24-optimal-binary-search-tree/

它创建一个动态数组:整数成本[N] [N];

这是如何工作的?我可以在GeeksForGeeks C++模拟器上运行代码,但在Visual Studio中本地出现错误“表达式必须有一个常量值”。

我在这里误解了什么?编译之前C++不需要知道数组的大小吗?

+1

VLAs是非标准的C++,有些编译器(如GCC)支持它们,但不应该依赖它,因为它不是可移植的代码。 – ArchbishopOfBanterbury

+0

该源程序将其称为C/C++实现,这已经让我怀疑任何代码的正确性。在C99中,VLA由标准的AFAIK支持。 – UnholySheep

+0

'sizeof'如何在这样的数组上工作? – Slava

回答

4

该代码不是标准的。

type name[runtime_size] 

是什么叫做可变长度数组。这在C++中不是标准的,只会在编译器中编译,这些编译器有像g ++或clang这样的扩展名。这个扩展存在的原因是在C99中有效。

在编译时必须知道数组的大小是完全正确的。如果你需要一个数组,并且在运行时间之前不知道大小,我建议你使用std::vectorstd::unique_ptr<type[]>

+0

另一种选择是使用新的。 –

+0

@JacobMcCarthy,是的,但只有在'vector'和'array'已被调查并发现想要之后。他们并不经常被发现。 – user4581301