为什么是 54345 而不是 54321? 我想如果 N 是 5 - I 是 3,它的 2 减 1 应该是 1 我根本不明白它是如何增加的?
const int N = 5;
typedef int AList[N];
int main()
{
AList A = {1, 2, 3, 4, 5};
for (int I = 0; I < 5; I++) {
A[I] = A[N-I-1];
}
for (int I = 0; I < 5; I++) {
cout << A[I];
}
}
最佳答案
How is this 54345 and not 54321? I thought if N is 5 - I which is 3 its 2 minus 1 should be one I dont get how it can increase at all?
随着第一个循环的进行,您不是在对其原始值进行操作,而是在循环的早期迭代中已经处理过的值上进行操作:
for (int I = 0; I < 5; I++) {
A[I] = A[N-I-1];
}
- 迭代 1:将
A[0]
设置为A[4]
=5
- 迭代 2:将
A[1]
设置为A[3]
=4
- 迭代 3:将
A[2]
设置为A[2]
=3
- 迭代 4:将
A[3]
设置为A[1]
=4
(以前是2
,但你在迭代 2 中更改了它!) - 迭代 5:将
A[4]
设置为A[0]
=5
(以前是1
,但你在第 1 次迭代中更改了它!)
你需要两个数组——一个源和一个目的地——才能正确地做到这一点,或者,为了更有效,交换
这些元素(而不是覆盖它们)通过迭代到输入数组中点的循环:
for (int i = 0; i < N/2; i++) {
std::swap(A[i], A[N-i-1]);
}
Live demo
当然,您可以通过简单地要求 C++ 标准库为您完成这些工作来避免所有:
std::reverse(std::begin(A), std::end(A));
(感谢@dasblinkenlight 提供 this last suggestion)
关于c++ - 为什么这个 C++ 输出与我预期的不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20522503/