编写顺时针旋转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
相关产品推荐
相关产品推荐

