用c++以三元组顺序表的数据类型存储矩阵,设计并实现矩阵的输入、输出和转置算法的代码
时间: 2024-10-24 07:16:07 浏览: 17
C和C++实现稀疏矩阵创建、快速转置(数据结构)
5星 · 资源好评率100%
在C++中,我们可以使用`std::tuple`来创建一个轻量级的数据结构存储矩阵元素,同时利用数组来表示矩阵的行和列。以下是一个简单的例子,实现了矩阵的输入、输出以及转置功能:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 定义一个三元组来存储矩阵元素
typedef tuple<int, int, int> MatrixElement;
// 矩阵数据结构
template <size_t ROWS, size_t COLS>
class Matrix {
private:
vector<MatrixElement> data;
// 转置矩阵需要的临时容器
vector<MatrixElement> transposeData;
public:
// 构造函数
Matrix() : data(ROWS * COLS) {}
// 输入矩阵
void inputMatrix(vector<vector<int>>& matrix) {
for (size_t i = 0; i < ROWS; ++i) {
for (size_t j = 0; j < COLS; ++j) {
data[i * COLS + j] = make_tuple(i, j, matrix[i][j]);
}
}
}
// 输出矩阵
void outputMatrix(vector<vector<int>>& matrix) const {
for (size_t i = 0; i < ROWS; ++i) {
for (size_t j = 0; j < COLS; ++j) {
auto& [row, col, value] = get<0>(data[i * COLS + j]), get<1>(data[i * COLS + j]), get<2>(data[i * COLS + j]);
matrix[row][col] = value;
}
}
}
// 转置矩阵
void transpose() {
if (ROWS != COLS) {
cerr << "Invalid operation: cannot transpose a non-square matrix." << endl;
return;
}
transposeData.resize(COLS * ROWS);
for (size_t i = 0; i < ROWS; ++i) {
for (size_t j = 0; j < COLS; ++j) {
transposeData[j * ROWS + i] = data[i * COLS + j];
}
}
data.swap(transposeData); // 交换数据,完成转置
}
};
int main() {
vector<vector<int>> matrix(3, vector<int>(4));
Matrix<3, 4> m;
cout << "Enter matrix elements:" << endl;
for (auto &row : matrix)
for (auto &value : row)
cin >> value;
m.inputMatrix(matrix);
cout << "Original Matrix:" << endl;
m.outputMatrix(matrix);
m.transpose();
cout << "Transposed Matrix:" << endl;
m.outputMatrix(matrix);
return 0;
}
```
这个代码首先定义了一个`Matrix`模板类,它包含一个`MatrixElement`类型的动态数组。然后实现了输入矩阵、输出矩阵和转置操作。注意,由于`tuple`的索引是从0开始的,所以我们需要将`(i, j)`映射到`(i * COLS + j)`作为`data`中的索引。
在`main()`函数中,我们创建了一个矩阵实例,并通过用户输入填充数据,随后展示原始矩阵和转置后的矩阵。
阅读全文