转置二维数组即行列互换,可通过嵌套循环实现;固定数组直接遍历赋值,vector动态数组灵活支持任意尺寸,方阵可原地交换元素节省空间。

在C++中转置二维数组,本质是将矩阵的行和列互换。假设原数组为 matrix[i][j],转置后变为 matrix[j][i]。实现方式根据数组类型(普通数组、动态数组或使用STL)略有不同,以下是几种常用方法。
使用固定大小的二维数组
如果二维数组大小已知且固定,可以直接通过嵌套循环进行转置。
示例代码:
#include
using namespace std;
int main() {
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int transpose[3][3];
// 转置操作
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
transpose[j][i] = matrix[i][j];
}
}
// 输出结果
cout << "转置后的数组:\n";
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
cout << transpose[i][j] << " ";
}
cout << endl;
}
return 0;
}
注意:此方法适用于编译时确定大小的数组。
使用vector实现动态二维数组转置
当数组大小在运行时才确定,推荐使用 std::vector<:vector>> 来存储二维数据,并进行转置。
立即学习“C++免费学习笔记(深入)”;
示例代码:
#include
#include
using namespace std;
vector> transposeMatrix(const vector >& matrix) {
int rows = matrix.size();
int cols = matrix[0].size();
vector> transpose(cols, vector (rows));
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
transpose[j][i] = matrix[i][j];
}
}
return transpose;
}
int main() {
vector> matrix = {{1, 2, 3}, {4, 5, 6}};
auto transposed = transposeMatrix(matrix);
cout << "转置后:\n";
for (const auto& row : transposed) {
for (int val : row) {
cout << val << " ";
}
cout << endl;
}
return 0;
}
这种方法灵活,支持任意行列数,且内存自动管理。
原地转置(仅限方阵)
对于行数等于列数的二维数组(即方阵),可以在不使用额外数组的情况下完成转置,通过交换 matrix[i][j] 和 matrix[j][i] 实现。
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
swap(matrix[i][j], matrix[j][i]);
}
}
注意内层从 j = i + 1 开始,避免重复交换导致还原。
基本上就这些常见方法。选择哪种取决于你的数组类型和是否需要原地操作。关键是理解转置就是行列索引互换。











