需要动态数组而不是静态数组的 C++ 示例

C++ examples where dynamic array is required instead of static array

我试图了解 C++ 中静态数组和动态数组之间的区别,但我想不出静态数组无法解决问题的情况。

我正在考虑以这种方式声明的静态数组:

    int N=10;
    int arr[N];`

我读到 here 静态和动态数组之间的主要区别在于 静态数组是在编译期间分配的,因此需要在编译时知道 N

但是, 说明以这种方式声明的数组也可以是可变长度数组:

Variable-length arrays were added in C99 - they behave mostly like fixed-length arrays, except that their size is established at run time; N does not have to be a compile-time constant expression:`

事实上,尽管 n 仅在运行时已知,但以下 C++ 代码仍在运行:

    int n =-1;
    std::cin>>n;
    int arr[n];

    //Let the user fill the array
    for(int i=0; i<n;i++){
        std::cin>>arr[i];
    }

    //Display array
    for(int i=0; i<n;i++){
        std::cout<<i<<" "<<arr[i]<<std::endl;
    }

所以我想 一个代码示例是这样定义的静态数组不起作用,需要使用动态数组 ?

该代码不适用于所有编译器,因为 variable length arrays aren't part of C++。从 ISO C99 开始,它们是 C 的一部分,一些编译器将允许 C++ 中的 VLA,但这不是一个可移植的解决方案。例如,GCC 允许 VLA,但会警告用户 (-Wno-vla)。

在底层,VLA 无论如何都是动态的,因为编译器无法保留适当数量的堆栈内存,因为它不知道数组将有多大。 std::vector 可以代替 VLA,用于在范围末尾释放的动态内存。