簡體   English   中英

交換函數不在 C++ 中交換二維數組的元素

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

所以這個轉置函數應該交換二維數組的元素,但它沒有交換它。

程序的輸出與其輸入相同。

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

我什至嘗試用我的交換代碼替換交換函數,在該代碼中您使用臨時變量交換兩個同樣不起作用的元素,所以我不知道發生了什么。

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等於0j等於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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM