用STL List容器编写矩阵就地转置
时间: 2023-12-03 21:47:08 浏览: 82
从文件中读取矩阵,并实现转置
5星 · 资源好评率100%
下面是使用STL List容器实现矩阵就地转置的代码:
```c++
#include <iostream>
#include <list>
using namespace std;
// 矩阵就地转置函数
void transpose(list<list<int>>& matrix) {
// 获取矩阵的行数和列数
int rows = matrix.size();
int cols = matrix.front().size();
// 对角线以下的元素与对角线以上的元素交换位置
for (int i = 0; i < rows; i++) {
auto it_i = matrix.begin();
advance(it_i, i);
auto it_j = it_i;
advance(it_j, i + 1);
for (int j = i + 1; j < cols; j++) {
swap(*(*it_i).begin(), *(*it_j).begin());
advance(it_i, 1);
advance(it_j, 1);
}
}
// 每一行逆序
for (auto& row : matrix) {
row.reverse();
}
}
// 打印矩阵函数
void print_matrix(const list<list<int>>& matrix) {
for (const auto& row : matrix) {
for (const auto& elem : row) {
cout << elem << " ";
}
cout << endl;
}
}
int main() {
// 初始化矩阵
list<list<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 打印原始矩阵
cout << "Original matrix:" << endl;
print_matrix(matrix);
// 就地转置矩阵
transpose(matrix);
// 打印转置后的矩阵
cout << "Transposed matrix:" << endl;
print_matrix(matrix);
return 0;
}
```
这里使用了两个STL List的成员函数:`begin()`和`advance()`。`begin()`函数返回一个迭代器指向容器中第一个元素,而`advance()`函数可以将迭代器按照指定的步长移动。这些函数都是STL中的通用函数,可以用于操作各种STL容器。
阅读全文