[英]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
等於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;
}
程序輸出是
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.