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 << 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/

相关文章:

c++ - 我应该从静态成员方法返回什么类型的指针

c++ - 使用 Pybind11 将 Eigen::Tensor 暴露给 Python

c++ - 为什么 C/C++ 编译器需要在编译时知道数组的大小?

c++ - 关闭 QAbstractItemView 的编辑器

c++ - 遍历另一个类中包含的 vector

c++ - 存储坐标的最佳方式 : struct of uints or double?

c++ - 文本定向正则表达式引擎如何在内部工作?

c++ - Qt在MainWindow的对象成员中连接SIGNAL和SLOT

C++:具有自定义结构的文本字段以支持数学或任何其他形式

C++ 可变参数模板 - 限制参数的数量