C++ 将动态大小的二维数组传递给函数

标签 c++ arrays

我正在尝试弄清楚如何将动态构造的二维数组传递给函数。 我知道必须指定列数,但我的情况取决于用户输入。

有什么解决方法吗?

例子:

// Some function
void function(matrix[i][j]) {
// do stuff
}
// Main function
int N;
cout << "Size: ";
cin >> N;

int matrix[N][N];

for (int i=0;i<N;i++) { // 
 for (int j=0;j<N;j++) { 
  cin >> matrix[N][N];
 }
}

sort(matrix);

你明白了:)

最佳答案

如果您使用的是 C++,则合理的选择是:

  • 使用boost::multi_array(推荐),或者
  • 制作您自己的二维数组类。好吧,您不必这样做,但是将 2D 数组逻辑封装在一个类中很有用并且可以使代码简洁。

手动二维数组索引看起来像这样:

void func(int* arrayData, int arrayWidth) {
    // element (x,y) is under arrayData[x + y*arrayWidth]
}

但是说真的,要么用一个类来包装它,要么享受 Boost 已经为你准备好的那个类。手动对其进行索引很烦人,并且会使代码更加不干净且容易出错。


编辑

http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html说 C99 为您提供了另一种解决方案:

void func(int len, int array[len][len]) {
   // notice how the first parameter is used in the definition of second parameter
}

应该也适用于 C++ 编译器,但我从未使用过这种方法。

关于C++ 将动态大小的二维数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4434395/

相关文章:

C中的数组可以定义为根据用户的输入进行调整吗?

c++ - 如何强制 gcc 编译器/链接器从可执行文件中删除未使用的静态数组

arrays - 如何修复 JSON 解析应用程序中的 'Index Out Of Range' 错误

c++ - 在 C++17 中,为什么关联容器有一个 `erase` 成员函数(非 -`const` ) `iterator` ?

c++ - 无法将类型的非常量左值引用绑定(bind)到类型的右值

c++ - ifstream 在循环中不起作用

javascript - 我将如何减少这个数组以便每个对象中的对象合并 javascript 但不知道键值名称

c++ - 模板特化和完美转发

c++ - 通过函数调用缩小 QDialog

javascript - 给出数组成员变量的名称