【问题标题】:C++ dynamic arrays. Why does this one work?C++ 动态数组。为什么这个有效?
【发布时间】:2016-09-29 20:09:38
【问题描述】:

我在看这个算法,第二个:动态规划解决方案

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

它创建一个动态数组:int cost[n][n];

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

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

【问题讨论】:

  • VLA 是非标准 c++,一些编译器(如 GCC)支持它们,但不应依赖它,因为它不是可移植代码。
  • 源将其称为 C/C++ 实现,这已经让我怀疑任何代码的正确性。在 C99 中,标准 AFAIK 支持 VLA。
  • sizeof 如何在这样的数组上工作?
  • 以这种方式声明时,编译器需要知道除最后一个维度之外的所有维度的大小。由于 n 在编译时是未知的,因此它不符合此条件。更好的解决方案可能是使用新的或向量。

标签: c++ arrays dynamic


【解决方案1】:

代码不标准。

type name[runtime_size]

就是所谓的变长数组。这在 C++ 中不是标准的,并且只会在具有此扩展名的编译器中编译,例如 g++ 或 clang。此扩展存在的原因是它在 C99 中有效。

您完全正确,必须在编译时知道数组的大小。如果您需要一个数组并且直到运行时才知道其大小,我建议您使用std::vectorstd::unique_ptr<type[]>

【讨论】:

  • 另一种选择是使用新的。
  • @JacobMcCarthy,是的,但只有在 vectorarray 被调查并发现需要之后。他们并不经常缺乏。
猜你喜欢
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 2015-01-29
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多