【问题标题】:When is it appropriate to use dynamic array as opposed to static array?什么时候适合使用动态数组而不是静态数组?
【发布时间】:2018-04-03 07:25:26
【问题描述】:

动态和静态数组:当两者都可能时,使用一个而不是另一个的原因通常是什么?


其中一种情况可能是

int n;
cin >> n;
int a[n];

int n;
cin >> n;
int* a = new int[n];

【问题讨论】:

  • 好吧,int a[n] 是 C++ 中的一个错误。
  • int a[n]称为变长数组,无效,不要写。
  • @melpomene,我可以编译并运行this,不会出错。
  • @HuXinqiao 那是因为编译器通常不仅支持标准 C++,还支持某些语言扩展。当传递正确的编译器标志(-pedantic/-pedantic-errors 与 GCC)时,将警告此类扩展。
  • @HuXinqiao 您可能在使用 gcc 时未启用警告。

标签: c++ arrays memory-management dynamic


【解决方案1】:

int a[n] 是一个变长数组,C++ 标准不允许这样做,因此第二个代码剪辑器应该是您的选择。

使用-pedantic 标志,你应该得到:

warning: ISO C++ forbids variable length array 'a' [-Wvla]
     int a[n];
            ^

【讨论】:

    【解决方案2】:

    正如其他答案所指出的,可变长度数组的语义是无效的。但是,c++ 确实通过 Vector 类支持动态长度数组,因此您的问题仍然有意义,只是与您使用的语法不同。我将解释这个问题,你应该使用向量还是数组。答案是:

    1)当您不需要动态大小或调整大小时使用数组并且速度很关键并且您不担心数组索引超出范围。

    2)否则使用向量

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 1970-01-01
      • 2018-05-12
      • 2021-10-31
      • 2019-06-28
      • 1970-01-01
      • 2017-05-06
      • 2019-06-02
      • 1970-01-01
      相关资源
      最近更新 更多