You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C++实现矩阵每列翻转 将[[1,2],[3,4]]转为[[3,4],[1,2]]

问题分析

你给出的转换需求[[1,2],[3,4]]→[[3,4],[1,2]]属于矩阵垂直翻转(上下翻转),是将矩阵的行顺序整体逆序,和你描述的「列翻转」表述有偏差,常规列翻转指左右翻转每一行,输出为[[2,1],[4,3]],以下按你给出的示例需求实现。

原代码存在的问题

  • 逻辑完全错位:rotaterow函数内下标使用混乱,固定操作第a=0行,交换的元素下标i、k、j没有对应到需要翻转的列/行位置,无法得到预期结果
  • 全局变量g多余且有害:既和传入的列参数j功能重复,还会引发不可预期的越界访问问题
  • 函数调用逻辑错误:外层循环仅传入固定的a=0,仅会操作第一行元素,无法实现全矩阵翻转
正确实现代码

方案1:直接交换行(最简实现)

不需要逐元素操作,直接交换整行即可实现需求,代码如下:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<vector<int>> matrix(n, vector<int>(n));
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cin >> matrix[i][j];
        }
    }

    // 翻转矩阵:交换第i行和第n-1-i行
    for(int i = 0; i < n/2; i++)
    {
        swap(matrix[i], matrix[n-1 -i]);
    }

    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
    }
    return 0;
}

方案2:逐列翻转元素(符合你最初的逐列操作思路)

如果你希望按逐列操作的逻辑实现,代码如下:

#include<bits/stdc++.h>
using namespace std;

// 翻转第col列的元素
void rotateCol(vector<vector<int>>& matrix, int col)
{
    int n = matrix.size();
    for(int i = 0; i < n/2; i++)
    {
        swap(matrix[i][col], matrix[n-1 -i][col]);
    }
}

int main()
{
    int n;
    cin >> n;
    vector<vector<int>> matrix(n, vector<int>(n));
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cin >> matrix[i][j];
        }
    }

    // 遍历每一列执行翻转
    for(int j = 0; j < n; j++)
    {
        rotateCol(matrix, j);
    }

    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
    }
    return 0;
}

方案3:调用标准库函数

可以直接用STL的reverse函数实现行逆序,代码更简洁:

// 只需要把翻转部分替换为以下代码即可
reverse(matrix.begin(), matrix.end());

内容的提问来源于stack exchange,提问作者Deco Pinkman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:45:09