交换函数不是在 C++ 中交换 2D 数组的元素

Swap Function is not swapping elements of 2D array in c++

本文关键字:交换 2D 数组 元素 C++ 函数      更新时间:2023-10-16

所以这个转置函数应该交换 2d 数组的元素,但它没有交换它。

程序的输出与其输入相同。

input:
1 2 3 4 5 6 7 8 9
output:
123456789

我什至尝试用我的交换代码替换交换函数,其中您使用 temp 变量来交换两个元素,这也不起作用,所以我不知道发生了什么。

void transpose(int input_arr[][3], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
swap(input_arr[i][j], input_arr[j][i]);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << input_arr[i][j];
}
}
}
int main()
{
const int n = 3;
int row = 3;
int col = 3;
int input_arr[n][n];
arr(input_arr, n);
transpose(input_arr, n);
}

你进行了太多的交换:)

例如,当i等于0并且j等于1交换时

input_arr[0][1] and input_arr[1][0]

i等于1j等于0时,您再次交换

input_arr[1][0] and input_arr[0][1]

仅以相反的顺序。

我可以建议以下解决方案

#include <iostream>
#include <utility>
template <typename T, size_t N>
void transpose( T ( &a )[N][N] )
{
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = i + 1; j < N; j++ ) 
{
std::swap( a[i][j], a[j][i] );
}           
}
}
template <typename T, size_t N>
std::ostream & display( const T ( &a )[N][N],std::ostream &os = std::cout )
{
for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
os << a[i][j] << ' ';
}
os << 'n';
}
return os;
}
int main() 
{
const size_t N1 = 3;
int a1[N1][N1] =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
display( a1 ) << 'n';
transpose( a1 );
display( a1 ) << 'n';
const size_t N2 = 4;
char a2[N2][N2] =
{
{ 'A', 'B', 'C', 'D' }, 
{ 'E', 'F', 'G', 'H' },
{ 'I', 'J', 'K', 'L' },
{ 'M', 'N', 'O', 'P' }
};
display( a2 ) << 'n';
transpose( a2 );
display( a2 ) << 'n';
return 0;
}

程序输出为

1 2 3 
4 5 6 
7 8 9 
1 4 7 
2 5 8 
3 6 9 
A B C D 
E F G H 
I J K L 
M N O P 
A E I M 
B F J N 
C G K O 
D H L P