请检查我的代码反转数组,我找不到错误。它在函数调用之前和之后显示相同的数组,我不知道为什么?
#include <iostream>
using namespace std;
void reverseArray(int *arr, int size)
{
int *Copy_arr = new int[size];
int temp;
for (int i = 0; i < size; i++)
{
Copy_arr[i] = arr[i];
}
for (int i = 0; i < size; i++)
{
temp = arr[i];
arr[i] = arr[(size - 1) - i];
arr[(size - 1) - i] = temp;
}
cout << "Array before function call was: ";
for (int i = 0; i < size; i++)
{
cout << Copy_arr[i] << " ";
}
cout << endl << "Array after function call is: ";
for (int i = 0; i < size; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
void main()
{
int size;
cout << "Enter size of array\n";
cin >> size;
int *p = new int[size];
cout << "Enter the elements of array\n";
for (int i = 0; i < size; i++)
{
cin >> p[i];
}
reverseArray(p, size);
}
在
for (int i = 0; i < size; i++)
{
temp = arr[i];
arr[i] = arr[(size - 1) - i];
arr[(size - 1) - i] = temp;
}
你反转数组两次。
arr[0]
和arr[size - 1]
交换为i == 0
和i == size - 1
。
它应该是
for (int i = 0; i < size / 2; i++)
{
std::swap(arr[i], arr[(size - 1) - i]);
}
甚至更简单
std::reverse(arr, arr + size);
问题是你没有使用缓冲区来反转,所以它们现在的方式是反转循环的一半做你想要的,另一半设置回来。在某种程度上它反转了反向阵列。
正如@ Jarod42和@kiran Biradar指出的那样,有更好的方法可以使用标准库中的函数来实现这一点,但我认为你想要在没有库的情况下这样做。
这是一个简单的修复,用Copy_arr替换arr
for (int i = 0; i < size; i++)
{
temp = Copy_arr[i];
arr[i] = Copy_arr[(size - 1) - i];
arr[(size - 1) - i] = temp;
}
您可以使用以下解决方案在C ++中反转数组:
for (int i = 0, j= size - 1; i < j; i++, j--)
{
swap = arr[i];
arr[i] = arr[j];
arr[j] = swap;
}