c++ 矩阵转置
时间: 2025-04-26 20:07:40 浏览: 32
### C++ 实现矩阵转置的方法
在C++中,可以采用多种方式实现矩阵转置。一种常见的方式是利用双重`for`循环遍历并交换元素的位置[^4]。
对于给定的矩阵,假设其维度为 `n×m` ,则可以通过创建一个新的矩阵来保存转置后的结果或者直接原地修改原始矩阵完成这一操作。当矩阵为方阵时(即行列数相等),可以直接在同一内存空间内进行转换;而对于矩形矩阵,则需额外分配新的存储区域以容纳变换后的数据结构[^1]。
下面展示了一种基于一维数组模拟二维矩阵来进行转置的具体做法:
#### 使用一维数组表示法
为了节省连续的空间,在某些情况下会用单个线性的动态数组代替传统的多维静态声明形式。此时需要特别注意索引映射关系,确保能够正确访问到对应的行和列上的数值。
```cpp
#include <iostream>
using namespace std;
void transpose(int* mat, const int rows, const int cols){
for (int row = 0; row < rows; ++row) {
for (int col = row + 1; col < cols; ++col) {
// 计算在一维数组中的偏移量
int idxA = row * cols + col;
int idxB = col * rows + row;
// 交换两个位置的数据
swap(mat[idxA], mat[idxB]);
}
}
}
// 打印矩阵函数用于验证结果
void printMatrix(const int* mat, const int rows, const int cols){
for (int r = 0; r < rows; ++r) {
for (int c = 0; c < cols; ++c)
cout << *(mat + r * cols + c) << ' ';
cout << endl;
}
}
```
此段代码展示了如何定义一个接受指针参数指向一维整型数组作为输入,并接收代表实际逻辑上构成几乘几规模矩阵的信息——即行数(`rows`)与列数(`cols`)。内部通过简单的数学运算找到待交换项之间的相对地址差值从而执行互换动作。
另外还有其他更高级别的容器类如STL库内的`std::vector<std::vector<int>>`也可以用来简化编程模型的同时保持良好的性能特性[^2]。
#### 利用标准模板库(STL)
这里给出一段使用向量(Vector)对象构建可变尺寸表格的例子,它不仅支持自动管理资源而且提供了丰富的接口方便开发者快速编写高效程序片段:
```cpp
class Solution {
public:
void rotate(std::vector<std::vector<int>>& matrix) {
size_t n = matrix.size();
// 先做一次完整的转置操作
for (size_t i = 0; i < n; ++i) {
for (size_t j = i + 1; j < n; ++j) {
std::swap(matrix[i][j], matrix[j][i]);
}
}
// 如果还需要进一步处理比如顺时针旋转90度的话,
// 可在此基础上继续添加相应的变换语句...
}
};
```
上述例子中,先进行了基本的转置操作,之后还可以根据需求追加更多复杂的几何变化,例如水平翻折、垂直反射或是任意角度旋转变换等等。
阅读全文
相关推荐
















