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

编写顺时针旋转90度的2D向量函数:非正方形向量旋转失败求助

2D向量顺时针90度旋转的正确实现(支持非正方形)

原代码的问题

你的实现逻辑存在明显错误,无法完成旋转操作,更别说处理非正方形矩阵:

  • 初始化tempPixel时直接复制了Pixels的所有行,后续循环又向tempPixel中push空vector,导致容器大小翻倍,结构混乱
  • 赋值语句tempPixel.at(j).push_back(Pixels.at(j))完全没有体现顺时针旋转的元素映射关系,只是重复添加原行的元素

正确实现代码

顺时针90度旋转的核心逻辑:若原矩阵为M行N列,旋转后会变成N行M列,新矩阵中temp[i][j]对应原矩阵的Pixels[M-1-j][i]。以下是修正后的代码:

bool Pgm::Clockwise(){
    int rows = Pixels.size();
    if (rows == 0) return false; // 空矩阵直接返回
    int cols = Pixels[0].size();

    // 初始化旋转后的矩阵:cols行,每行rows个元素
    vector<vector<int>> tempPixel(cols, vector<int>(rows));

    // 按旋转映射关系赋值
    for (int i = 0; i < cols; ++i) {
        for (int j = 0; j < rows; ++j) {
            tempPixel[i][j] = Pixels[rows - 1 - j][i];
        }
    }

    // 替换原矩阵
    Pixels.swap(tempPixel);
    return true;
}

关键说明

  • 先获取原矩阵的行列数,处理空矩阵的边界情况
  • 直接初始化目标矩阵的尺寸,避免不必要的动态扩容
  • 通过双重循环严格按照旋转的坐标映射规则赋值,确保非正方形矩阵也能正确旋转
  • 使用swap方法替换原矩阵,效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:39:52