【问题标题】:Passing variable defining the size of a 2D array's elements [duplicate]传递定义二维数组元素大小的变量[重复]
【发布时间】:2014-11-20 23:55:31
【问题描述】:

我正在处理一些 C++ 中的数组传递。如果我使用以下数字定义数组,则以下工作:

 gen0[6][7]. 

但是,我不能调用我发送变量作为我的大小参数的方法。我意识到我可能需要将它们作为指针或通过引用传递。我在别处读到使用unsigned int,没有用。我尝试了一些变体,但我正在为整个概念而苦苦挣扎。任何提示/建议将不胜感激!

//in main
 int col1, col2;
 col1 = rand() % 40 + 1;
 col2 = rand() %  50 +1;
 int gen0[col1][col2];
 print(gen0)

//not in main
 template<int R, int C>
 void print(int (&array)[R][C])

【问题讨论】:

  • 您遇到错误了吗?究竟是什么问题?
  • 了解如何使用new[]delete[] 在堆上分配(和解除分配!)数组值——这将允许您使用在运行时而不是编译时确定的大小。
  • 您定义的 VLA(可变长度数组)不是 C++ 标准的一部分。不要指望它会像现在这样工作。它们作为实现扩展提供。模板提供在编译时完成。您的数组维度是在运行时定义的。我的建议是使用std::vector&lt;std::vector&lt;int&gt;&gt; 并旋转基于迭代器的打印解决方案。

标签: c++ multidimensional-array variable-length-array


【解决方案1】:

VLA(可变长度数组)是一些编译器的扩展,它在运行时完成。

而:

template<int R, int C> void print(const int (&array)[R][C])

是通过引用传递多维数组的正确方法,这是在编译时完成的,与VLA不兼容。

一种可能的替代方法是使用std::vector

std::vector<std::vector<int>> gen0(col1, std::vector<int>(col2));

void print(const std::vector<std::vector<int>>& array)

【讨论】:

    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2017-07-26
    • 2021-10-31
    相关资源
    最近更新 更多