为什么不能生成大尺寸的数组而向量可以?
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
我有以下代码:
#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