转置操作本质是matrixi→matrixj,即行列索引互换;必须用swap避免数据覆盖,非方阵不可原地转置。

转置操作本质是 matrix[i][j] → matrix[j][i]
二维数组转置不是“旋转”,而是行列索引互换:原第 i 行第 j 列的值,变成新矩阵第 j 行第 i 列的值。这个映射关系必须严格遵守,否则结果错位。
常见错误现象包括:
- 循环边界写反(比如用
for (j=0; j去遍历列) - 目标数组维度没按
cols × rows分配,导致越界或截断 - 原地操作时未限制为方阵,强行交换引发覆盖
固定大小数组用嵌套循环直接赋值
编译期已知尺寸(如 int a[4][5]),最简单方式是声明目标数组并双层循环赋值。
关键点:
- 目标数组声明必须是
int trans[5][4](列数在前,行数在后) - 内层循环变量控制源列,外层控制源行;赋值语句固定为
trans[j][i] = a[i][j] - 不能复用同一块内存(比如把
a当作输出数组),除非是方阵且用原地法
示例片段:
std::vector<:vector>></:vector>
- 先检查输入是否为空:
if (mat.empty() || mat[0].empty()) - 目标容器初始化为
vector>(cols, vector (rows)) - 避免用
push_back动态追加——会破坏连续性,影响后续访问性能 - 若原矩阵每行长度不一致(非矩形),需额外校验或抛异常
典型函数签名:
rows == cols
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











