[英]Reverse Array C++? What am I doing wrong?
int main(){
int n;
cin >> n;
vector<int> arr(n);
for(int i =0; i < n; i++){
cin >> arr[i];
}
for(int i = n-1; n-1 >= 0; i--){
cout << " "<< arr[i] << " ";
}
return 0;
}
我究竟做错了什么? 我觉得我在正确的轨道上,但我不确定什么是错的,这是黑客等级上的阵列 DS 问题。 不幸的是,我认为他们没有透露答案。
将条件更改为i >= 0
, n - 1 >= 0
可能导致无限循环。 但是不管它有没有,因为在这两种情况下,它都不会产生所需的结果。
for(int i = n-1; i >= 0; i--){
std::cout << " "<< arr[i] << " ";
}
或者使用std::reverse
。
std::reverse(arr.begin(), arr.end());
for (int i = 0; i < n; i++){
std::cout << arr[i] << " ";
}
请参阅此处的第二种方法。
for(int i = n-1; n-1 >= 0; i--){
cout << " "<< arr[i] << " ";
}
如果 n <= 0,您不减少 n,这会导致无限循环。
不要重新发明轮子,标准库会在这里帮助你。
使用std::reverse
:
int main()
{
std::vector<int> vec;
int n = 0;
int temp = 0;
std::cin >> n;
for (int i = 0; i != n; ++i) {
std::cin >> temp;
vec.emplace_back(temp);
}
std::reverse(std::begin(vec), std::end(vec));
}
在这两种情况下,您都已初始化变量 i=0 并根据需要递增(在第一个循环中)/递减(在第二个循环中)。 然而,在第二个循环中,您将条件置于 n 上,尽管您从未更改 n 的值。这将导致无限循环,因为 n-1 在整个程序中保持不变。 要解决这个问题,您应该像下面的代码一样将条件更改为 i-1>0。
for(int i = n-1; i-1 >= 0; i--)
{
cout << " "<< arr[i] << " ";
}
如果这有帮助,请点赞。干杯。
for(int i = n-1; n-1 >= 0; i--)
在这里,您在for
循环的条件上犯了一个错误。 您已将n-1
分配给i
并且在减量部分中使用了i--
,因此您应该使用条件何时应该停止循环或循环将停止的i
值。 因此,只需更改条件如下:
for(int i = n-1; i >= 0; i--)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.