C++ 为什么是c++;输出与我预期的不同?

C++ 为什么是c++;输出与我预期的不同?,c++,C++,怎么是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

怎么是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];
   }
 }
const int N=5;
typedef int-list[N];
int main()
{
列表A={1,2,3,4,5};
对于(int I=0;I<5;I++){
A[I]=A[N-I-1];
}
对于(int I=0;I<5;I++){
库特
怎么是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];
   }
 }
随着第一个循环的进行,您不会对其原始值进行操作,而是对在循环的早期迭代中已经处理过的值进行操作:

for (int I = 0; I < 5; I++) {
   A[I] = A[N-I-1];
}

当然,你可以通过简单地让C++标准库为你做工作来避免所有这些:

std::reverse(std::begin(A), std::end(A));

(感谢@dasblinkenlight for)

这是代码逻辑的问题:一旦您这样做了

A[I] = A[N-I-1];
在第一次迭代中,
1
将永远消失。您的数组现在如下所示:

5 2 3 4 5
无法将
1
放回原来的位置。数组应该是这样的

5 2 3 4 1
这意味着您需要交换这两个元素

执行您试图执行的操作的正确方法是循环到数组的中间,并使用交换而不是赋值(通过函数
std::swap
或自己编写交换)

保留大部分代码的修复程序如下

for (int I = 0; I < 2 /*stop at the middle*/; I++) {
    std::swap(A[I], A[N-I-1]);
}

这是一个逻辑问题,不是编程问题。我实际上并没有写这样的代码。很抱歉,我的wifi已关闭,所以我在手机上键入了:/。@LightnessRacesinOrbit很抱歉,但我必须将其编辑为Allman样式:p@Thomas然后我将不得不再次编辑它。它是如此的奇妙,演示了三个di如果你认为“在可能的情况下一点都没有”,那就不要使用括号样式!谢谢大家!闪电帮我弄明白了。@user3091585:如果你觉得我值得,就用绿色勾号奖励我!
std::reverse(std::begin(A), std::end(A));