我想理解我在网上找到的这段代码,我刚开始学习用数组编程,这些代码为我节省了很多代码,但我根本不理解这段代码
// 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 array\n";
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 Array\n";
for (i = 0; i < count; i++) {
cout << output[i] << " ";
}
return 0;
}
它说它将输入数组反向复制到输出数组的部分确实让我很困惑,我不明白它是如何还原值的。
for(i = 0; i < count; i++){
output[i] = input[count-i-1];
}
有人可以解释一下这部分是如何运作的吗?
答案 0 :(得分:3)
它只从输入数组中获取数据但从结束开始并将它们放在输出数组中。假设您有10个项目的数组。然后你可以这样写:
output[0] = input[10-0-1]
output[1] = input[10-1-1]
你可能想知道为什么最后的-1。这是因为C ++中的数组是从0开始索引的。所以如果你想要第10个元素,你需要从数组大小中减去一个。
答案 1 :(得分:0)
考虑一个包含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];
答案 2 :(得分:0)
首先,要了解(count-1)是原始数组中最后一个元素的索引号。 现在[(count-1)-i]成为遵循相反顺序的数组元素的索引。因此,当我们将i的值从0循环到count时,它开始存储来自结尾的值。 注意:i和[(count-1)-i]之和总是给出(count-1)作为答案,这是将数字反向存储的关键。
答案 3 :(得分:0)
有许多不同的方法来反转其中一个数组值,你可以通过操作数组索引在程序中提到它们:
for (i = 0; i < count; i++) {
output[i] = input[count - i - 1];
}
你可以用更详细的方式分解它以便更好地理解它
请考虑将此数组作为示例:
input = [1, 4, 5, 8, 0]
其元素数5
所以count = 5
当你循环它时
从input[]
i = 0
数组的最后一个索引
您可以使用公式:count - i -1
count -1
是输入数组中的最后一个元素索引,因为数组索引在C ++中从0开始。
然后count -1 - i
:减去索引i
以反转输入数组中元素的顺序。
如果您尝试第一个索引i = 0
:
5 - 1 - 0 = 4
所以索引将是:input[4]
&gt;&gt; 0
如您所见,您在for循环中从0
获取最后一个元素i = 0
现在输出数组应为:output[0] = input[4]
将输入的最后一个元素放在输出中的第一个元素
第二个索引i = 1
:
5 - 1 - 1 = 3
输入索引为:input[3]
&gt;&gt; 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