反向数组函数

时间:2016-08-31 04:50:41

标签: c++ arrays function

所以我制作了一个以下列方式工作的程序。

用户决定数组的大小。

用户然后用x选择的整数填充数组,例如如果他们选择将数组5设为大,则会要求他们用5个数字填充数组。然而,我对我如何做到这一点有点困惑,一旦这一点完成,其他一切都应该工作我相信,因为我已经通过用指定的值对其进行硬编码来测试它并且函数剂量反转程序。

这是我的代码。

#include <iostream>

using std::cout;
using std::endl;
using std::cin;

void reverse(int [], int);
void printarray(int [], int );

void printarray(int arr[], int count)
{
        for(int i = 0; i < count; ++i)
                cout<<arr[i]<<' ';

        cout<<'\n';
}

void reverse(int arr[], int count)
{
     int temp;
     for (int i = 0; i < count/2; ++i)
     {
            temp = arr[i];
            arr[i] = arr[count-i-1];
            arr[count-i-1] = temp;
     }
}

int main ()
{
        int x;
        cout << "how big is this thing " << endl;
        cin >> 
        const int SIZE = x;
        int arr [SIZE] = {., ., ., ., ., ., ., . , ., .};

        cout<<"Before reverse\n";
        printarray(arr, SIZE);
        reverse(arr, SIZE);
        cout<<"After reverse\n";
        printarray(arr, SIZE);

        return 0;
}

我确实认为我必须使用for循环或其他东西重复并将整数输入到数组的每个索引中,对不起,我已经完成了数组。 对此问题的任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:0)

这听起来像是一项家庭作业?在大多数情况下,你会使用类似std :: vector的东西,但我想你需要坚持本机数组。

int arr[SIZE];

这将在堆栈上创建一个数组,并且必须在编译时知道大小。如果您不知道运行时的大小,则需要使用new关键字(或类似malloc

在堆上分配数组。
int *arr = new int[x];

一旦你完成了

,你就需要自己释放这些记忆
delete[] arr;

这应该足以让你开始并指出你正确的方向。希望有所帮助

答案 1 :(得分:0)

因为编译时数组的大小未知,所以无法使用int array[SIZE]构造。

您需要在运行时使用new分配内存:

int x;
cout << "how big is this thing " << endl;
cin >> x;
int *arr = new int[x];

for(int i = 0; i < x; i++) {
  cout << "enter arry[" << i << "]" << endl;
  cin >> arr[i];
}

cout<<"Before reverse\n";
printarray(arr, SIZE);
reverse(arr, SIZE);
cout<<"After reverse\n";
printarray(arr, SIZE);

delete[] arr;

delete[] arr运算符释放分配的数组。您应该释放每个分配的内存块以避免内存泄漏。

答案 2 :(得分:0)

You can try the following..

#include <iostream>
#include <string>

void reverse(int arr[], int count)
{
     int temp;
     for (int i = 0; i < count/2; ++i)
     {
            temp = arr[i];
            arr[i] = arr[count-i-1];
            arr[count-i-1] = temp;
     }
}

void print_array(int my_array[], int array_size)
{
    std::cout << "Your array: ";
    for (int x = 0; x <array_size; x++) {
        std::cout << my_array[x] << " ";
    }
    std::cout << std::endl;
}

int main()
{
    int array_size;
    std::cout << "how big is this thing " << std::endl;
    std::cin >> array_size;

    int my_array[array_size];

    std::cout << "Please enter the elements of the array. Press ENTER after each element." << std::endl;
    for (int x = 0; x <array_size; x++) {
        std::cin >> my_array[x];
    }

    print_array(my_array, array_size);

    std::cout << "Reverse array..." << std::endl;
    reverse(my_array, array_size);
    print_array(my_array, array_size);
}

答案 3 :(得分:-1)

如M.M所述,使用std :: vector并插入向量的开头(你不需要你反向)

#include <iostream>
#include <vector>


int main(int argc, char** argv)
{
    std::vector<int> values;
    int n_values;

    std::cout << "How mutch numbers ?";
    std::cin >> n_values;

    std::cout << "Now Enter " << n_values << " Values : ";
    for(auto i=0; i<n_values; i++)
    {
        int tmp;
        std::cin >> tmp;

        values.insert(values.begin(), tmp); 
    }

    for(auto elem : values)
        std::cout << elem << "\n";


    return 0;
}