vector<vector<int>> matrix_multiply(vector<vector<int>>& mat1, vector<vector<int>>& mat2)是什么意思
时间: 2024-06-02 11:04:40 浏览: 123
这是一个函数,其作用是计算两个矩阵的乘积。矩阵乘法是两个矩阵的运算,通常用于线性代数和计算机图形学中。矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数,结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数。在这个函数中,输入参数mat1和mat2是两个二维向量,表示两个矩阵。函数返回一个二维向量,表示两个矩阵的乘积。
下面是函数实现的示例代码:
```c++
vector<vector<int>> matrix_multiply(vector<vector<int>>& mat1, vector<vector<int>>& mat2) {
int m = mat1.size(), n = mat1.size(), p = mat2.size();
vector<vector<int>> res(m, vector<int>(p, 0));
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
for (int k = 0; k < n; k++) {
res[i][j] += mat1[i][k] * mat2[k][j];
}
}
}
return res;
}
```
相关问题
描述:设计一个基于 C++面向对象编程的程序。实现矩阵乘法。要求使用模板技术支持不同数据类型的矩阵。 要求: 1.定义一个模板类Matrix”,表示矩阵。类中需要包含矩阵的行数、列数和数据 2.为Matrix类实现构造函数、接受行数、列数和一个用于初始化矩阵元素的值 3.为Matrix类实现一个成员函数 multiply,实现矩阵柔法。如果两个矩阵无法相乘 (例如行数和列数不匹配),则抛出一个异常。重载矩阵乘法操作符 4.实现一个友元函数~operator*,重载矩阵乘法操作符 示例: cpp int main { try { Matrix<int> mat1(2,3,1); Matrix<int> mat2(3,2.2). Matrix<int> result = mat1- mat2: result.print(); }catch (const std:exception& e){ std::cout <<"Error:"<< e.whatl std::endl } return 0; }
以下是一个实现矩阵乘法的基于C++面向对象编程的程序示例:
```cpp
#include <iostream>
#include <vector>
template<typename T>
class Matrix {
private:
int rows;
int cols;
std::vector<std::vector<T>> data;
public:
Matrix(int numRows, int numCols, T value) : rows(numRows), cols(numCols), data(numRows, std::vector<T>(numCols, value)) {}
Matrix<T> multiply(const Matrix<T>& other) const {
if (cols != other.rows) {
throw std::runtime_error("Matrix dimensions do not match");
}
Matrix<T> result(rows, other.cols, 0);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < other.cols; j++) {
for (int k = 0; k < cols; k++) {
result.data[i][j] += data[i][k] * other.data[k][j];
}
}
}
return result;
}
void print() const {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
std::cout << data[i][j] << " ";
}
std::cout << std::endl;
}
}
template<typename U>
friend Matrix<U> operator*(const Matrix<U>& lhs, const Matrix<U>& rhs);
};
template<typename U>
Matrix<U> operator*(const Matrix<U>& lhs, const Matrix<U>& rhs) {
return lhs.multiply(rhs);
}
int main() {
try {
Matrix<int> mat1(2, 3, 1);
Matrix<int> mat2(3, 2, 2);
Matrix<int> result = mat1 * mat2;
result.print();
} catch (const std::exception& e) {
std::cout << "Error: " << e.what() << std::endl;
}
return 0;
}
```
这个程序定义了一个模板类`Matrix`,用于表示矩阵。它包含了矩阵的行数、列数以及数据。构造函数接受行数、列数和一个用于初始化矩阵元素的值。成员函数`multiply`实现了矩阵乘法,如果两个矩阵无法相乘,则抛出一个异常。友元函数`operator*`重载了矩阵乘法操作符。
在示例的`main`函数中,创建了两个矩阵`mat1`和`mat2`,然后调用`multiply`函数进行矩阵乘法,并将结果打印出来。如果发生异常,则捕获并打印错误信息。
用vector实现矩阵
在C++中,可以使用`vector`容器来实现矩阵。首先,我们可以定义一个二维的`vector`容器来表示矩阵,如下所示:
```c++
#include <vector>
using namespace std;
typedef vector<vector<double>> Matrix;
```
上述代码中,我们使用`typedef`关键字定义了一个新的类型`Matrix`,它是一个二维的`vector`容器,内部元素类型为`double`。
接下来,我们可以编写函数来创建矩阵、访问矩阵元素、矩阵加法、矩阵乘法等操作。例如,下面的代码实现了创建一个大小为`m x n`的矩阵,并将所有元素初始化为`val`:
```c++
Matrix createMatrix(int m, int n, double val) {
return Matrix(m, vector<double>(n, val));
}
```
下面的代码实现了访问矩阵中第`i`行第`j`列的元素:
```c++
double getElement(const Matrix& mat, int i, int j) {
return mat[i][j];
}
```
下面的代码实现了矩阵加法:
```c++
Matrix add(const Matrix& mat1, const Matrix& mat2) {
int m = mat1.size();
int n = mat1[0].size();
Matrix res = createMatrix(m, n, 0.0);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
res[i][j] = mat1[i][j] + mat2[i][j];
}
}
return res;
}
```
下面的代码实现了矩阵乘法:
```c++
Matrix multiply(const Matrix& mat1, const Matrix& mat2) {
int m = mat1.size();
int n = mat1[0].size();
int p = mat2[0].size();
Matrix res = createMatrix(m, p, 0.0);
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
for (int k = 0; k < n; k++) {
res[i][j] += mat1[i][k] * mat2[k][j];
}
}
}
return res;
}
```
使用上述函数,我们就可以方便地对矩阵进行各种操作了。
阅读全文