如何解决为什么不能生成大尺寸的数组而矢量可以?
我有以下代码:
#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万时,它立即退出程序,退出值不为零!换句话说,它崩溃了。但是,当我使用向量而不是数组时,甚至数百万个元素都可以通过这种方式精确生成。谁能解释一下?数组是否有某种限制来产生大量数字?
解决方法
那是因为你用数组分配的内存在栈上,而你的程序栈不够大,所以在使用数组时会得到一个stack overflow。但是,当您使用向量时,您会在堆上分配内存。
如果您仍然喜欢使用 std::array
,您可以将数组放在堆上:new std::array<float,N>(0)
。
因为 array
在堆栈上分配内存,而 vector
在堆上分配内存。您也可以使用 array
或使用 shared_ptr
或 unique_ptr
在堆上分配 new
,如下所示:
shared_ptr<array<float,N>> a(new array<float,N>{0});
float v = (*a)[10]; // dereference for operator access
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。