【发布时间】:2020-03-30 17:24:47
【问题描述】:
我有一个 C++ 程序,我必须根据给定的要旋转的元素数 (x) 顺时针旋转数组。例如,如果输入数组是
[1,2,3,4,5]
鉴于必须旋转 2 个元素(表示为 x)。
输出数组应该是
[3,4,5,1,2]
代码:
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
int n,x;
cin>>n>>x;
int a[n],b[x];
for(int i=0;i<n;i++){
cin>>a[i];
}
copy(a,a+x,b);
copy(b,b+x,a+n);
n=n+x;
for(int i=x;i<n;i++){
cout<<a[i]<<" ";
}
}
return 0;
}
我在这里所做的是将给定数量的元素复制到一个新数组中。稍后将它们复制回从“n”开始的原始数组。所以我的数组看起来像 [1,2,3,4,5,1,2]。
稍后我将从索引“x”开始打印出数组。这样我的数组就会看起来像 [3,4,5,1,2]。
我能够编译程序并得到输出。但是在一个名为 GeekforGeeks 的网站上提交代码时,它的编译器抛出了一个分段错误 (SIGSEGV)。
【问题讨论】:
-
??????小心前行,看看会发生什么?
-
copy(b,b+x,a+n)不是要求在a数组的end 之后复制数据吗? -
是的,它是 tadman
-
提示:当您在数组边界之外写入时,您认为会发生什么?
-
您需要一个编译器环境,例如 Visual Studio Express、Xcode,甚至是 Visual Studio Code + GCC 或 Clang。有很多选择,这些只是常见的例子。