【发布时间】:2020-12-27 03:55:27
【问题描述】:
我是 C++ 的初学者。我尝试编写一个程序来一个一个地旋转一个向量
即{1,2,3,4,5} --> {2,3,4,5,1} --> {3,4,5,1,2}
vector<vector<int>> allrot(const vector<int>& a)
{
vector<vector<int>> result;
for (int i = 0; i < a.size(); i ++ ){
rotate(a.begin(), a.begin() + 1, a.end());
result.push_back(a);
}
return result;
}
这不起作用,我有几个问题。
- 为什么我应该使用
vector<int>& a而不是vector<int> a? - 我的代码有什么问题?
感谢您的帮助
【问题讨论】:
-
我建议你买一本好书/阅读一些关于文档的东西
-
您收到错误消息,因为您尝试在
const向量上调用rotate。您可以通过先添加然后旋转来解决此问题并保留参数const。result.push_back(a); rotate(result.back().begin(), result.back().begin() + i + 1, result.back().end()); -
@JohnnyMopp 您也可以在那里使用
rotate_copy,我认为应该更快?你会:result.emplace_back(std::vector<int>(a.size()); std::rotate_copy(a.begin(), a.begin() + i + 1, a.end(), result.back().begin());