C++ 如何创建2MB数组或向量并用随机整数填充它

C++ 如何创建2MB数组或向量并用随机整数填充它,c++,arrays,vector,io,C++,Arrays,Vector,Io,我想创建一个静态大小(2mb)的容器(在c++/VisualStudio2008中),可能是一个数组或一个向量,并用一些随机整数填充它 有没有一个简单的方法 谢谢 我想过这样做: int x[1048576]; for (int i=1; i<1048576; i++) { int r = rand()%i; x[i] = r; } intx[1048576]; 对于(inti=1;i请尝试以下方法: int* array = new int[524288]; for

我想创建一个静态大小(2mb)的容器(在c++/VisualStudio2008中),可能是一个数组或一个向量,并用一些随机整数填充它

有没有一个简单的方法

谢谢

我想过这样做:

int x[1048576];

for (int i=1; i<1048576; i++)
{
    int r = rand()%i;
    x[i] = r;
}
intx[1048576];
对于(inti=1;i请尝试以下方法:

int* array = new int[524288];
for (size_t k = 0; k < 524288; ++k)
    array[k] = rand();
int*array=newint[524288];
对于(尺寸k=0;k<524288;++k)
数组[k]=rand();
以后不要忘记删除阵列。

尝试以下操作:

int* array = new int[524288];
for (size_t k = 0; k < 524288; ++k)
    array[k] = rand();
int*array=newint[524288];
对于(尺寸k=0;k<524288;++k)
数组[k]=rand();

以后不要忘记删除阵列。

只需使用以下方法:

#包括
#包括
#包括
#包括
...
//创建数组
标准::向量arr(大小);
//std::array arr;//对于静态数组;
//种子随机性
std::srand(std::time(NULL));
//随机化值
std::generate(arr.begin()、arr.end()、&std::rand);
像普通数组一样使用数组:

for(int i=0;i!=arr.size();++i)

不能简单地使用以下内容:

#包括
#包括
#包括
#包括
...
//创建数组
标准::向量arr(大小);
//std::array arr;//对于静态数组;
//种子随机性
std::srand(std::time(NULL));
//随机化值
std::generate(arr.begin()、arr.end()、&std::rand);
像普通数组一样使用数组:

for(int i=0;i!=arr.size();++i)
coutC++11版本(但与VS2008不兼容):

#包括
#包括
#包括
#包括
#包括
int main(){
常数int mem=2*1024*1024;
const int cnt=mem/sizeof(int);//2MB中的int数:)
std::载体v(cnt);
std::随机_装置rd;
标准:均匀分布图;
std::generate(std::begin(v),std::end(v),[&]{returndis(rd);});
返回0;
}
C++11版本(但与VS2008不兼容):

#包括
#包括
#包括
#包括
#包括
int main(){
常数int mem=2*1024*1024;
const int cnt=mem/sizeof(int);//2MB中的int数:)
std::载体v(cnt);
std::随机_装置rd;
标准:均匀分布图;
std::generate(std::begin(v),std::end(v),[&]{returndis(rd);});
返回0;
}


您对已经尝试过的内容是否有任何具体问题?是否创建它并使用随机数分配它会导致您出现问题?您尝试了什么?很抱歉,我放弃了添加任何代码,我现在添加了…您正在堆栈上分配一个4MB数组(大于堆栈大小-除非您增加该大小),并忽略x[0]并填充其余的。您没有为随机数生成器设定种子,因此每次运行程序时都会得到相同的随机数。这是除了x[0]和假设你固定了堆栈大小,所以你没有堆栈溢出。我忘了提到你的随机数增加模。你真的想要那个吗?你对你已经尝试过的东西有什么特别的问题吗?你是否创建了它,并用随机数分配给它,从而导致了你的问题?您尝试了什么?很抱歉,我放弃了添加任何代码,我现在添加了…您正在堆栈上分配一个4MB数组(大于堆栈大小-除非您增加该大小),并忽略x[0]并填充其余的。您没有为随机数生成器设定种子,因此每次运行程序时都会得到相同的随机数。这是除了x[0]和假设你固定了堆栈大小,所以你没有堆栈溢出。我忘了提到你的随机数增加模。你真的想要吗?这是个好的开始。别忘了给rand()播种。在某些实现中,rand()只返回一个短值。-1:为什么要手动管理内存?为什么是动态记忆?如果确实需要这样做,您能否至少包括一些关于异常安全和不同的new和delete操作符的注释,以及关于堆栈展开的部分?为什么不呢?(最初的)问题看起来像是一个非常初级的问题,所以我的想法是你提到的所有这些花哨的东西都不符合标准。老实说,你真的期望兰德抛出异常吗?这个片段只是一个基本的例子。我不认为有必要投否决票。好吧,老实说,正如所希望的:
rand()
不会抛出<代码>新建
不起作用。所有这些“奇特”的东西,正如你所说的,对于安全(非后门)应用程序是至关重要的,只要使用一个标准容器,你就可以免费获得这些应用程序。我认为你低估了正确的手动内存管理所需的技能;使用正确的
delete
操作符只是冰山一角。然而,我认为对于初学者来说,最好先学会处理指针、数组等,然后再去做更有趣的事情。你似乎坚持的哲学,即完成这些事情,至少在我看来是有问题的。我并不是说你的观点不值得在安全相关的应用程序中考虑;确实可能存在2MB分配失败的情况。。不过,答案并没有错。这是一个良好的开端。别忘了给rand()播种。在某些实现中,rand()只返回一个短值。-1:为什么要手动管理内存?为什么是动态记忆?如果确实需要这样做,您能否至少包括一些关于异常安全和不同的new和delete操作符的注释,以及关于堆栈展开的部分?为什么不呢?(最初的)问题看起来像是一个非常初级的问题,所以我的想法是你提到的所有这些花哨的东西都不符合标准。老实说,你真的期望兰德抛出异常吗?这个片段只是一个基本的例子。我不认为有必要投否决票。好吧,老实说,正如所希望的:
rand()
不会抛出<代码>新建
不起作用。所有这些“奇特”的东西,正如你所说的,对于安全(非后门)应用程序是至关重要的,只要使用一个标准容器,你就可以免费获得这些应用程序。我想