我有一项任务,只能使用数组索引找到矩阵的转置(在c ++中)。我的主要调用函数indexTranspose,但我无法弄清楚为什么当我在函数内打印数组时输出是正确的,但是当我在main中打印出来时矩阵没有更新。矩阵是一个充满9个随机整数的文本文件。
#include <iostream>
#include <fstream>
using namespace std;
//function declarations
void printMatrix(int m[][3]);
void indexTranspose(int n[3][3]);
//void pointerTranspose(int m[][3]);
//begin main
int main() {
int m[3][3];
ifstream values("matrix.txt");
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
values >> m[i][j];
printMatrix(m);
indexTranspose(m);
printMatrix(m);
/*pointerTranspose(m);
printMatrix(m);
*/
} //end main
void printMatrix(int m[][3]) {
for (int i = 0; i < 3; i++) {
cout << "[ ";
for (int j = 0; j < 3; j++)
cout << m[i][j] << " ";
cout << "]" << endl;
}
cout <<endl;
}
void indexTranspose (int n[][3]) {
cout << "Transposing the matrix using indices..." <<endl;
int temp[3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
temp[j][i] = n[i][j];
}
n = temp;
cout << "Printing n"<< endl;
printMatrix(n);
}
运行此函数时得到的输出是原始矩阵,然后是转置(在函数内打印出来),然后是原始矩阵。我不确定为什么转置函数只在本地更新数组而不是修改main中的数组。
答案 0 :(得分:2)
您不应尝试在n
功能中重新分配indexTranspose
。而是交换数组中的单个值。
将i, j
与j, i
交换,并确保以后不再单独将j, i
与i, j
交换。
void indexTranspose (int n[][3])
{
std::cout << "Transposing the matrix using indices..." << std::endl;
for (int i = 0; i < 3; i++)
{
// the j < i ensures, that i, j are not swapped twice and i, i is never swapped because its the same index anyway
for (int j = 0; j < i; j++)
{
std::swap(n[i][j], n[j][i]);
}
}
std::cout << "Printing n"<< std::endl;
printMatrix(n);
}
要使用std::swap
,请添加<algorithm>
(C ++ 98)或<utility>
(C ++ 11及更高版本)的包含。