在C ++中反转数组

时间:2018-09-14 15:07:19

标签: c++ algorithm

请检查我的反转数组代码,找不到错误。 它在函数调用前后显示相同的数组,我不知道为什么?

#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);
}

1 个答案:

答案 0 :(得分:-2)

问题在于您没有使用缓冲区来进行反向操作,因此,现在的方式是,反向循环的一半完成了您想要的操作,另一半则将所有操作都恢复了。以某种方式反转了反转的数组。

@ Jarod42和@kiran Biradar指出,有更好的方法可以使用标准库中的函数来执行此操作,但我想您想在没有库的情况下执行此操作。

这是一个简单的解决方法,将Arr替换为Copy_arr

for (int i = 0; i < size; i++)
{
    temp = Copy_arr[i];
    arr[i] = Copy_arr[(size - 1) - i];
    arr[(size - 1) - i] = temp;
}