Я пытаюсь вычислить транспонирование матрицы. Теперь я передал матрицу как двумерный вектор, и, поскольку я хочу, чтобы функция рассчитывала транспонирование на месте, я передал двумерный вектор по ссылке. Но, похоже, ничего не даст.
Я пытался использовать 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
оказываются одинаковыми.