为什么不能生成大尺寸的数组而向量可以?

Why a big size of array cannot be generated while a vector can?

我有以下代码:

#include <random>
#include <vector>
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
const int N=100000;
int main() {

    default_random_engine Generator(time(0));
    uniform_real_distribution<float> dist(0.0f,nextafter(1.0f, DBL_MAX));

    array<float,N> a{0};
    //vector<float> a(N,0);



    for ( auto it = a.begin(); it != a.end(); ++it ){
        *it=dist(Generator);
    }

    return 0;
}

我的疑惑是当N为100000时可以生成数组a,但是当N为100万时,程序立即退出,退出值不为0!换句话说,它崩溃了。但是,当我使用向量而不是数组时,甚至可以通过这种方式准确生成数百万个元素。谁能解释一下?数组是否有产生大量数字的某种限制?

那是因为你用数组分配的内存在栈上,而你的程序栈不够大,所以你在使用数组时得到了stack overflow。但是,当您使用向量时,您会在堆上分配内存。

如果还是喜欢用std::array,可以把数组放在堆上:new std::array<float, N>(0).

因为 array allocates it's memory on the stack, while the vector allocates memory on the heap. You can allocate the array on the heap as well, with new or by using a shared_ptr or unique_ptr 是这样的:

shared_ptr<array<float,N>> a(new array<float,N>{0});
float v = (*a)[10]; // dereference for operator access