C++ 无法确定旋转矢量时输出错误的原因
我已经编写了以下代码-C++ 无法确定旋转矢量时输出错误的原因,c++,algorithm,C++,Algorithm,我已经编写了以下代码- #include <cassert> #include <vector> #include <string> #include <sstream> #include <algorithm> using namespace std; vector<int> v; int main() { int n, d, i = 0; cin >> n >> d;
#include <cassert>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
vector<int> v;
int main()
{
int n, d, i = 0;
cin >> n >> d;
assert(n >= 1 && n <= 100000 && d >= 1 && d <= n);
int temp = 0;
for (int i = 0; i < n; i++)
{
cin >> temp;
v.push_back(temp);
}
reverse(v.begin(), v.begin() + d - 1);
reverse(v.begin() + d, v.end());
reverse(v.begin(), v.end());
for (i = 0; i < n; i++)
cout << v[i] << " ";
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
向量v;
int main()
{
int n,d,i=0;
cin>>n>>d;
断言(n>=1&&n=1&&d>temp;
v、 推回(温度);
}
反向(v.begin(),v.begin()+d-1);
反向(v.开始()+d,v.结束());
反向(v.begin(),v.end());
对于(i=0;i cout对于该输入,程序的输出是正确的。错误的是您的期望
需要认识到的是,标准算法不会取消对指定的结束迭代器的引用。因此reverse(v.begin(),v.begin()+3)
将反转v
的前三个元素(即v[0]
到v[2]
),而不是前四个元素
因此,第一个reverse()
反转前三个元素,生成顺序3 2 1 4 5
为了得到您期望的结果,它将颠倒前四个步骤。您尝试过使用调试器吗?@AlgirdasPreidžius-不幸的是,这是一个新系统,我没有安装调试工具。另外,它是Linux:(那么?从Linux发行版的包管理器安装一个应该不到5分钟。(你甚至可能已经安装了的基本命令行版本,即使在没有图形前端的情况下使用它也需要一些学习。)非常感谢Peter。请你解释一下这句话好吗?“需要意识到的是,标准算法不会取消对指定端迭代器的引用。”这意味着永远不会访问与结束迭代器对应的值。