数组中的反转值

时间:2017-06-13 21:01:47

标签: c++ arrays

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

// 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];
} 

有人可以解释一下这部分是如何运作的吗?

4 个答案:

答案 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