12 c++ pointers function matrix
我想创建类库,一个函数,其参数是一个未知大小的矩阵,用户将创建自己的矩阵并使用自己的大小并将其传递给此函数,对其矩阵进行一些操作,如下所示,将是功能
calculateDeterminantOfTheMatrix( int matrix[][])
{
some Operations to do on matrix
}
Run Code Online (Sandbox Code Playgroud)
das*_*ght 14
C和C++的内置组件不能很好地支持多维数组.N只有N-1在编译时知道维度时,才能传递-dimension数组:
calculateDeterminantOfTheMatrix( int matrix[][123])
Run Code Online (Sandbox Code Playgroud)
但是,标准库提供std::vector容器,对于多维数组非常有效:在您的情况下,传递vector<vector<int> > &matrix将是在C++中处理任务的正确方法.
int calculateDeterminantOfTheMatrix(vector<vector<int> > &matrix) {
int res = 0;
for (int i = 0 ; i != matrix.size() ; i++)
for(int j = 0 ; j != matrix[i].size() ; j++)
res += matrix[i][j];
return res;
}
Run Code Online (Sandbox Code Playgroud)
作为额外的好处,您不需要将矩阵的维度传递给函数:matrix.size()表示第一个维度,并matrix[0].size()表示第二个维度.
小智 6
C 解决方案:
在 C 中,作为函数参数传递时,不能省略数组大小(最左边除外)。
你可以写: int a[]
但不能:int a[][]
例如: int a[][20]
这个约束在这里,因为编译器需要确定访问数组元素的适当偏移量。但是,您可以这样做:
void print_arbitrary_2D_array(void *arr, int y, int x)
{
/* cast to 2D array type */
double (*p_arr)[y][x] = (double (*)[y][x]) arr;
int i, j;
for (i = 0; i < y; ++i) {
for (j = 0; j < x; ++j)
printf(" %lf", (*p_arr)[i][j]);
putchar('\n');
}
}
double arr_1[4][3] = {
{ 3.3, 5.8, 2.3 },
{ 9.1, 3.2, 6.1 },
{ 1.2, 7.9, 9.4 },
{ 0.2, 9.5, 2.4 }
};
double arr_2[2][5] = {
{ 3.6, 1.4, 6.7, 0.1, 4.2 },
{ 8.4, 2.3, 5.9, 1.4, 8.3 }
};
print_arbitrary_2D_array(arr_1, 4, 3);
putchar('\n');
print_arbitrary_2D_array(arr_2, 2, 5);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22474 次 |
| 最近记录: |