反转数组中的值
Reverse Values in an Array
我想了解我在网上找到的这段代码,我刚刚开始学习使用数组编程,这为我节省了很多代码行,但我根本不理解这段代码
// 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
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '