gpt4 book ai didi

c++ - 为什么这个 C++ 输出与我预期的不同?

转载 作者:太空狗 更新时间:2023-10-29 23:30:26 25 4
gpt4 key购买 nike

为什么是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com