在 C++ 中具有二维数组的函数
Posted
技术标签:
【中文标题】在 C++ 中具有二维数组的函数【英文标题】:function with arrays with 2 dimensions in c++ 【发布时间】:2013-06-29 23:10:03 【问题描述】:我有一个乘法数组的函数。函数是multiply
:
void multiply(int array1[][], array2[][]);
但它不起作用。
例如我要数组
int array1[4][10]
int array2[10][6]
multiply(arra1[4][10], array2[10][6])
但它不起作用。
我需要任意大小的调用函数。
稍后我需要调用函数:
int array3[5][5]
int array4[5][5]
multiply(arra1[5][5], array2[5][5])
如何获取函数中的数组?
多维数组必须对除第一个维度之外的所有维度都有边界
我需要可变行和可变列
【问题讨论】:
你用 C 和 C++ 标记了这个,但在标题中询问了 C++。每个问题你应该只问一个问题,因为这个问题的答案与 C 和 C++ 不同。应该从这个问题中删除 C 标记,如果您对 C 答案感兴趣,您应该创建一个单独的问题。 ***.com/questions/1719051/… 或 ***.com/questions/4767190/… 或许多其他的可能重复。 【参考方案1】:您似乎使用了 multiply 函数,就像它的定义是这样的: void multiply(int number1, int number2); 也许您应该发布乘法函数的完整定义
【讨论】:
【参考方案2】:使用 std::vector 对数组建模,除非您有使用数组的特定原因。 示例:
vector< vector<int> > myArray1(3, vector<int>(2,0));
vector< vector<int> > myArray2(3, vector<int>(2,0));
// ...
vector< vector<int> > multiply(vector< vector<int> > &myArray1,
vector< vector<int> > &myArray2)
vector< vector<int> > result(myArray1.length(), myArray2[0].length());
for(int i = 0; i < myArray1.length(); i++)
for(int j = 0; j < myArray1[i].length(); j++)
// ...
return result;
【讨论】:
【参考方案3】:C 风格的数组并不是真正的数组,而是一组指针数学技巧。您根本无法从函数中返回这样的数组,而传入实际上只是在引擎盖下传递了一个指针。
由于指针适用于简单数组并且使用相同的语法,我们可以忘记这种差异。在这种情况下,参数中的数组 externt 将被完全忽略。
对于 2D 数组,它的工作方式将不再相同,因为要使指针数学工作,您必须传递适当的“切片”。因此,除了第一个数组范围之外的所有范围都是强制性的。您可以像以前一样将第一个留空或与任何数字一起使用。
当然,要使函数真正有用,您必须将第一个范围也作为单独的参数传递,除非函数可以以某种方式从数据中找出它。
void multiply(const int in_array1[][10], const int in_array2[][10], int rows, int out_array[][10]);
可能是一个很好的函数,可以将具有 10 列和可变行的数组相乘。
如果您需要全变量,只需传入 (int* arr, int rows, int cols) 并自己计算单元格位置。
【讨论】:
但我需要可变行和可变列 但如果我只是传入 (int* arr, int rows, int cols) 并计算单元格位置,请告诉我:数组下标的无效类型 'int[int]' 尝试类似 arr[5*cols + 6]【参考方案4】:您可以使用multiply()
的模板定义来完成此操作。
template <unsigned L, unsigned M, unsigned N>
void multiply (int (&array1)[L][M], int (&array2)[M][N])
//...
int main ()
int array1[4][10];
int array2[10][6];
int array3[2][2];
multiply(array1, array2); // ok, inner dimensions match
multiply(array1, array3); // fail, inner dimensions don't match
数组的维度将由模板函数调用的类型推导确定。
【讨论】:
以上是关于在 C++ 中具有二维数组的函数的主要内容,如果未能解决你的问题,请参考以下文章