如何解决在二维数组中交换列C ++
我想交换二维数组中的第一列和第二列。我应该在那里使用swap()
函数吗?
void swapp(int tab[5][6],int n = 5,int m = 6) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
tab[n][m] = j + i;
swap(tab[n][1],tab[n][0]);
cout << "{" << tab[n][m] << "}" << " ";
}
cout << endl;
}
}
解决方法
假设n
和m
表示矩阵的大小:
void swapp(int tab[5][6],int n=5,int m=6)
{
if(m >= 2){ // check if we have at least 2 columns (to swap)
for(int i=0;i<n;i++){ // use swap for each rows
swap(tab[i][1],tab[i][0]); // swap data in this row
}
}
}
,
这些声明
tab[n][m]=j+i;
swap(tab[n][1],tab[n][0]);
cout<<"{"<<tab[n][m]<<"}"<<" ";
之所以调用未定义的行为,是因为数组之外有访问内存,例如,如果某个数组具有n
行或列,则行或列的索引的有效范围是[0,n)
。
要交换二维数组的两列,仅编写一个循环就足够了。
您可以编写一个通用函数来交换整数数组中的任何两个指定列。
您在这里。
#include <iostream>
#include <iomanip>
#include <utility>
template <size_t M,size_t N>
void swapp( int ( &a )[M][N],size_t col1,size_t col2 )
{
if ( col1 < N && col2 < N && col1 != col2 )
{
for ( size_t i = 0; i < M; i++ )
{
std::swap( a[i][col1],a[i][col2] );
}
}
}
int main()
{
const size_t M = 3,N = 4;
int a[M][N] =
{
{ 1,2,3,4 },{ 5,6,7,8 },{ 9,10,11,12 }
};
for ( const auto &row : a )
{
for ( const auto &item : row )
{
std::cout << std::setw( 2 ) << item << ' ';
}
std::cout << '\n';
}
std::cout << '\n';
swapp( a,1 );
for ( const auto &row : a )
{
for ( const auto &item : row )
{
std::cout << std::setw( 2 ) << item << ' ';
}
std::cout << '\n';
}
std::cout << '\n';
return 0;
}
程序输出为
1 2 3 4
5 6 7 8
9 10 11 12
2 1 3 4
6 5 7 8
10 9 11 12
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。