我正在尝试计算矩阵的转置。现在,我已将矩阵作为2维向量传递,并且由于我希望函数计算就位转置,因此我通过引用传递了2维向量。但这似乎没有效果。
我尝试使用std::swap(mat[i][j], mat[j][i])
,但没有任何效果。再次,我尝试手动交换整数(使用第三个变量),仍然无效。
#include<iostream>
#include<vector>
#include<algorithm>
#define N 5
void inPlaceTranspose(std::vector<std::vector<int> > &mat) {
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
int temp = mat[i][j];
mat[i][j] = mat[j][i];
mat[j][i] = temp;
//std::swap(mat[i][j], mat[j][i]);
}
}
std::cout << "Transpose:\n";
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
std::cout << mat[i][j] << " ";
}
std::cout << "\n";
}
}
int main() {
std::vector<std::vector<int> > mat(N, std::vector<int>(N));
mat = {
{1, 2, 3, 4, 5},
{7, 8, 9, 10, 11},
{13, 14, 15, 16, 17},
{19, 20, 21, 22, 23},
{25, 26, 27, 28, 29},
};
std::cout << "Original Matrix:\n";
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
std::cout << mat[i][j] << " ";
}
std::cout << "\n";
}
inPlaceTranspose(mat);
return 0;
}
Original Matrix
和Transpose
变得一样。
答案 0 :(得分:3)
问题不在于传递矩阵的方式,也不在于交换的方式。问题出在您的逻辑上:
for(int j = 0; j < N; j++) {
这将导致元素交换两次 ,从而取消了对转置矩阵的尝试。
尝试像这样循环直到i
,而不是N
:
for(int j = 0; j < i; j++) {
相反。