请检查我的代码反转数组,我找不到错误.它在函数调用之前和之后显示相同的数组,我不知道为什么?
#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);
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*d42 12
在
for (int i = 0; i < size; i++)
{
temp = arr[i];
arr[i] = arr[(size - 1) - i];
arr[(size - 1) - i] = temp;
}
Run Code Online (Sandbox Code Playgroud)
你反转数组两次.
arr[0]并arr[size - 1]交换为i == 0AND i == size - 1.
它应该是
for (int i = 0; i < size / 2; i++)
{
std::swap(arr[i], arr[(size - 1) - i]);
}
Run Code Online (Sandbox Code Playgroud)
甚至更简单
std::reverse(arr, arr + size);
Run Code Online (Sandbox Code Playgroud)