【问题标题】:Swapping columns in two-dimensional arrays c++交换二维数组中的列c ++
【发布时间】:2020-08-17 17:44:38
【问题描述】:

我想交换我的二维数组中的第一列和第二列。我应该如何使用那里的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;
  }
}

【问题讨论】:

  • 您的错误是您认为对于一维运算需要两个循环。如果您查看代码,您会发现 j 根本没有被使用,这表明它不应该存在。

标签: c++ arrays loops for-loop swap


【解决方案1】:

假设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
        }
    }
}

【讨论】:

    【解决方案2】:

    这些陈述

      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, 0, 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 
    

    【讨论】:

      猜你喜欢
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多