c++ - 如何传递数组并返回二维矩阵的数组值?

标签 c++ arrays matrix arguments

从主调用

matrix_multiplication(arrayA,arrayB,row1,col1,col2);

函数定义

float matrix__multiplication(float **arrayA,float **arrayB,int row1,int col1,int col2)
{
float result[row1][col2];
result[][]=....

return result;
}

我想知道如何在函数调用中传递二维数组, 如何在函数定义中接收 以及如何返回结果矩阵?

最佳答案

像这样为数组使用原始指针比 C++ 更符合 C 风格。使用vector of vector(索引还是很高效的)。

size_t rows(5);
size_t columns(15);
vector<float> row(columns);
vector<vector<float>> matrix(rows, row);
matrix[0][0] = 0.1f;

更好的方法是将底层存储包装在 Matrix 类中,该类实现所需的矩阵运算、保持和强制维度、确保矩阵与乘法兼容,等等。

class Matrix
{ 
public:
  Matrix(const int _rows, const int _cols) : rows(_rows), cols(_cols)
  {
  }

  Matrix Multiply(const Matrix& rhs);

private:
  vector<vector<float>> storage;
  size_t rows;
  size_t cols;
};

Matrix Matrix::multiply(const Matrix& rhs)
{
  Matrix result(*this, rhs);   // construct matrix of right dimensions
  // multiply the operands
  return result;     // modern compilers do not copy construct the result
}

如果您的矩阵需求很复杂,您可以考虑像 Boost.UBlas 这样的库而不是自己动手。这是模板化代码,支持稀疏矩阵、对角矩阵和其他常见矩阵类型的特化。

关于c++ - 如何传递数组并返回二维矩阵的数组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232654/

相关文章:

c++ - 围绕当前位置旋转矩阵的快速方法

c++ - 如何在不更改轴的编号和标题位置的情况下使刻度线指向图中的负方向

java - 在 Windows 上加载多个 JAR - JNI JNI_CreateJavaVM

c++ - 多个 .cpp 文件中包含的头文件

c++ - 为 sh4 架构构建 boost 库

c# - 将数组从 C# COM 对象传递给 JavaScript?

javascript - 通过现有键更新 localStorage 数组中的值

mysql - 无法将字符串转换为整数 - 从散列中的散列中提取值

matlab - 高斯-赛德尔法超过机器数?

Python 线性方程 - 高斯消元法