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

C++ 交换函数不是在c+中交换2D数组的元素+;,c++,arrays,matrix,multidimensional-array,transpose,C++,Arrays,Matrix,Multidimensional Array,Transpose,所以这个转置函数应该交换2d数组的元素,但它不是交换它 程序的输出与其输入相同 input: 1 2 3 4 5 6 7 8 9 output: 123456789 我甚至试着用我的交换代码来替换swap函数,在这个代码中,您使用temp变量来交换两个同样不起作用的元素,所以我不知道发生了什么 void transpose(int input_arr[][3], int n) { for (int i = 0; i < n; i++) {

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

程序的输出与其输入相同

input:
      1 2 3 4 5 6 7 8 9
output:
      123456789
我甚至试着用我的交换代码来替换swap函数,在这个代码中,您使用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);
    }
void转置(int-input_-arr[][3],int-n){
对于(int i=0;i你的掉期交易太多了。:)

例如,当
i
等于
0
j
等于
1
时,您正在交换

input_arr[0][1] and input_arr[1][0]
i
等于
1
j
等于
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;
}

在这里进行一些调试可以让您了解问题所在。如果您没有像Visual Studio中那样好的调试器(这样可以一次一步通过代码1行,另一种方法是在每次交换之前和之后打印输出预期输出是什么?请尝试使用2x2数组并遍历代码。@SID我的预期输出是147258369。我还弄清楚了我的代码不起作用的原因,现在我知道如何正确执行,但由于我是新的h在此之前,我不知道是否应该删除我的问题,或者我应该自己回答,但再次回答它看起来很奇怪回答自己是可以接受的,尽管你应该检查你是否重复了其他答案的工作在您尝试发布答案之前。请记住,StackOverflow问题的主要目的不是帮助提出问题的人,而是帮助将来的读者解决同样的问题。@SidS它适用于任何具有ant可交换类型元素的方阵,因为它使用了模板函数。
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