C++ : Creating an array with a size entered by the user

后端 未结 3 554
不知归路
不知归路 2020-12-01 20:36

I was wondering if we can make an array with a size specified by the user.

Ex:

int a;
cout<<\"Enter desired size of the array\";
cin>>a;
         


        
相关标签:
3条回答
  • 2020-12-01 20:38

    Use std::vector (requires header <vector>):

    int size;
    cout<<"Enter desired size of the array";
    cin >> size;
    std::vector<int> array(size);
    
    0 讨论(0)
  • 2020-12-01 20:55

    In C++, there are two types of storage: stack-based memory, and heap-based memory. The size of an object in stack-based memory must be static (i.e. not changing), and therefore must be known at compile time. That means you can do this:

    int array[10]; // fine, size of array known to be 10 at compile time
    

    but not this:

    int size;
    // set size at runtime
    int array[size]; // error, what is the size of array?
    

    Note there is a difference between a constant value and a value known at compile time, which means you can't even do this:

    int i;
    // set i at runtime
    const int size = i;
    int array[size]; // error, size not known at compile time
    

    If you want a dynamically-sized object, you can access heap-based memory with some form of the new operator:

    int size;
    // set size at runtime
    int* array = new int[size] // fine, size of array can be determined at runtime
    

    However, this 'raw' usage of new is not recommended as you must use delete to recover the allocated memory.

    delete[] array;
    

    This is a pain, as you have to remember to delete everything you create with new (and only delete once). Fortunately, C++ has many data structures that do this for you (i.e. they use new and delete behind the scenes to dynamically change the size of the object).

    std::vector is one example of these self-managing data structures, and is a direct replacement for an array. That means you can do this:

    int size;
    // set size at runtime
    std::vector<int> vec(size); // fine, size of vector can be set at runtime
    

    and don't have to worry about new or delete. It gets even better, because std::vector will automatically resize itself as you add more elements.

    vec.push_back(0); // fine, std::vector will request more memory if needed
    

    In summary: don't use arrays unless you know the size at compile time (in which case, don't use new), instead use std::vector.

    0 讨论(0)
  • 2020-12-01 20:56

    Using dynamic allocation

    More on dynamic memory in C++

    #include <iostream>
    
    int main() {
        int size;
        std::cout <<"Enter desired size of the array";
        std::cin >> size;
        int *array = new int[size];
    }
    

    As mentioned in the linked article above:

    In most cases, memory allocated dynamically is only needed during specific periods of time within a program; once it is no longer needed, it can be freed so that the memory becomes available again for other requests of dynamic memory. This is the purpose of operator delete.

    When you're done with array you should delete it using the following syntax:

    delete[] array; 
    

    Using std::vector

    More on vectors

    #include <iostream>
    #include <vector>
    
    int main() {
        int size;
        std::cout <<"Enter desired size of the array";
        std::cin >> size;
        std::vector<int> array(size);
    }
    
    0 讨论(0)
提交回复
热议问题