You can use dynamic allocation to make arrays of a variable size.
    	    This may be more efficient than a vector, but cannot change
	    size.
/*
 * Dynamic allocation can be used to create variable-sized arrays.
 */
#include <iostream>
#include <memory>
#include <utility>
using namespace std;
int main()
{
        // Ask the size.
        int size;
        cout << "How big would you like that array, sir? ";
        cin >> size;
        
        // Allocate a native array with new.  It returns a pointer to
        // the content type, which points to the first item in the
        // array.
        int *arr1 = new int[size];
        // Read it in.
        for(int i = 0; i < size; ++i)
                cin >> arr1[i];
        
        // Or you can use a smart pointer.
        unique_ptr<int[]> arr2 = std::make_unique<int[]>(size);
        // Copy the data
        for(int i = 0; i < size; ++i) {
                arr2[size-i-1] = arr1[i];
        }
        // The array we got with new we have to get rid of.  We must use
        // the brackets to remind the system that it's an array, since
        // it's only a pointer to integer.
        delete [] arr1;
        // Print the copied array.
        for(int i = 0; i < size; ++i) {
                cout << arr2[i] << " ";
        }
        cout << endl;
        // The smart pointer is cleanedup automatically.
}