在二维数组中交换列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;
  }
}

解决方法

假设nm表示矩阵的大小:

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 

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...