反转数组时遇到问题
Having trouble reversing an array
这是我的代码:
#include <iostream>
using namespace std;
void reverse(int *, int);
int main()
{
const int len = 10;
int intArray[len] = {5, 6, 4, 1, 3, 10, 15, 13, 2, 7};
reverse(intArray, len);
}
void reverse(int intArray[], int len)
{
int j = len;
for(int i = 0; i < len; i++)
{
--j;
intArray[i] = intArray[j];
cout << intArray[i] << " ";
}
}
然后是我的输出:
7 2 13 15 10 10 15 13 2 7
我看到一些代码做同样事情的例子,我想知道为什么它们都使用一个临时变量,如果有必要的话?
此外,这个问题是麻省理工学院OCW作业的变体。尽管他们的赋值不需要打印出反转的数组,但他们希望我们将反转的值存储在原始数组中。但出于某种原因,他们的for循环只运行了一半的长度?以下是他们的解决方案:
void reverse (int numbers [] , const int numbersLen )
{
for(int i = 0; i < numbersLen / 2; ++ i ) {
int tmp = numbers [ i ];
int indexFromEnd = numbersLen - i - 1;
numbers [ i ] = numbers [ indexFromEnd ];
numbers [ indexFromEnd ] = tmp ;
}
}
只需将标准算法std::reverse
与std::begin
和std::end
迭代器一起使用
#include <algorithm>
#include <iostream>
int main()
{
const int len = 10;
int intArray[len] = {5, 6, 4, 1, 3, 10, 15, 13, 2, 7};
std::reverse(std::begin(intArray), std::end(intArray));
for (auto&& e : intArray)
std::cout << e << ", ";
}
实例。
如果你必须编写自己的反向算法,这里有一个可能的实现
template<class BidirIt>
void reverse(BidirIt first, BidirIt last)
{
while ((first != last) && (first != --last)) {
std::iter_swap(first++, last);
}
}
这里,std::iter_swap(a, b)
只是调用std::swap(*a, *b)
。当然,你可以提出自己的交换方案。
建议让算法采用迭代器对,以便与标准库的其余部分兼容。
您将所有"反转"的字节保存到覆盖原始元素的同一数组中。使用另一个空数组将结果保存到.
如果您需要使用相同的数组,您可以交换相应的元素。对于交换,您需要临时变量,并且只运行数组长度的一半的循环。
在反向函数中使用以下for循环:
int tmp;
for (int i = 0; i < len / 2; i++)
{
--j;
tmp = intArray[j];
intArray[j] = intArray[i];
intArray[i] = tmp;
}
然后从不同的循环打印数组。
为了好玩,可以在单个循环中尝试手动反向算法和输出。
void reverse(int intArray[], int len)
{
if (len <= 0)
return;
cout << intArray[len - 1] << " ";
if (len == 1)
return;
reverse(intArray + 1, len - 2);
int tmp = intArray[0];
cout << tmp << " ";
intArray[0] = intArray[len - 1];
intArray[len - 1] = tmp;
}
tmp变量是交换两个值所必需的。否则,在第一次赋值(=)时,您将丢失一些数据。
相关文章:
- 编译包含字符串的代码时遇到问题
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 从其他类访问类时遇到问题
- 使用静态成员声明类时遇到问题
- C++ 填充数组时遇到问题
- 在将字符串放入字符串向量时遇到问题?
- 余数除法和不允许除以零 (c++) 时遇到问题
- 我在C++中使用 getline() 函数时遇到问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 在我的四叉树实现中遇到问题
- 在 c++ 中循环遍历数组时遇到问题
- 使用 MinGW 在 Windows 上构建 GLEW 时遇到问题
- 编译 Cilk Plus 程序时遇到问题
- 存储另一个函数返回的布尔数组时遇到问题
- 我在 OpenGL 中显示图像时遇到问题
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组
- 在 for 循环中更新两个变量时遇到问题C++
- 为什么我的程序在打开网络设备时遇到问题
- 在 Tensorflow C++ 中使用 FIFOQueue 时遇到问题
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?