反转数组中的值

Reverse Values in an Array

本文关键字:数组      更新时间:2023-10-16

我想了解我在网上找到的这段代码,我刚刚开始学习使用数组编程,这为我节省了很多代码行,但我根本不理解这段代码

// C++ Program to reverse an array
#include <iostream>
using namespace std;
int main()
{
int input[500], output[500], count, i;
cout << "Enter number of elements in arrayn";
cin >> count;
cout << "Enter " << count << " numbers n";
for (i = 0; i < count; i++) {
cin >> input[i];
}
// Copy numbers from inputArray to outputArray in
// reverse order
for (i = 0; i < count; i++) {
output[i] = input[count - i - 1];
}
// Print Reversed array
cout << "Reversed Arrayn";
for (i = 0; i < count; i++) {
cout << output[i] << " ";
}
return 0;
}

它说它将输入数组反向复制到输出数组的部分真的让我感到困惑,我不明白它是如何恢复值的。

for(i = 0; i < count; i++){
output[i] = input[count-i-1];
} 

谁能解释一下这部分是如何工作的?

它只是从输入数组中获取数据,但从末尾开始并将它们放在输出数组中。假设您有 10 个项目的数组。然后你可以这样写:

output[0] = input[10-0-1]
output[1] = input[10-1-1]

您可能想知道为什么末尾是 -1。这是因为 C++ 中的数组从 0 开始索引。因此,如果您想要第 10 个元素,则需要从数组大小中减去一个。

考虑一个包含 5 个元素的小数组

input  = 1,2,3,4,5 output = 5,4,3,2,1 count = 5
Breaking down the copy loop
i=0 1st element output[1-1] = input[5-1] -> -1 since arrays are zero indexed 
i=1 2nd element output[2-1] = input[4-1]  
..........
.......... 
i=4 5th element output[5-1] = input[1-1]
Now to generalize this we can say 
output[i] = input[(count-1) -i] For all  i >=0 and i < count

希望这有助于解码output[i] = input[count-i-1];

首先,理解 (count-1) 是原始数组中最后一个元素的索引号。 现在 [(count-1)-i] 成为数组元素的索引,遵循相反的顺序。因此,当我们从 0 循环 i 的值到 count 时,它从末尾开始存储值。 注意:i 和 [(count-1)-i] 的总和总是给出 (count-1) 作为答案,这是反向存储数字的关键。

有许多不同的方法可以反转数组值,您可以通过操作数组索引在程序中提到其中之一:

for (i = 0; i < count; i++) {
output[i] = input[count - i - 1];
}

您可以更详细地分解它以很好地理解它

以以下数组为例:

input = [1, 4, 5, 8, 0]

其元素数量5如此count = 5

当你循环它时

为了从i = 0获取input[]数组的最后一个索引

您可以使用公式:count - i -1

count -1是输入数组中的最后一个元素索引,因为数组索引从 0 开始C++。

然后count -1 - i:减去索引i以反转输入数组中元素的顺序。

如果您尝试第一个索引i = 0

5 - 1 - 0 = 4

所以索引将是:input[4]>>0

正如您现在看到的,您可以从 for 循环中的i = 0中获取最后一个元素0

现在输出数组应该是:output[0] = input[4]

将输入的最后一个元素放入输出中的第一个元素

第二i = 1指数:

5 - 1 - 1 = 3

输入索引为 :input[3]>>8

输出数组应为:output[1] = input[3]

现在输出数组的前两个元素实际上是输入数组的最后两个元素。

您可以将其工作原理总结如下:

input[i] 1  4  5  8  0                output[i]  0
i        ^0          ^ 5 - 1 - 0      i          0
input[i] 1  4  5  8  0                output[i]  0  8
i           ^1    ^ 5 - 1 - 1         i          0  1
input[i] 1  4  5  8  0                output[i]  0  8  5
i              ^2 = 5 - 1 - 2         i          0  1  2
input[i] 1   4   5   8  0             output[i]  0  8  5  4 
i            ^5-1-3  ^3               i          0  1  2  3
input[i] 1   4   5   8  0             output[i]  0  8  5  4  1 
i        ^5-1-4         ^4            i          0  1  2  3  4