我想创建一个静态大小(2mb)的容器(在c ++ / visual studio 2008中),可能是一个数组或一个向量,并用一些随机整数填充它。
有一种简单的方法吗?
感谢。
我想要做那样的事情:
int x[1048576];
for (int i=1; i<1048576; i++)
{
int r = rand()%i;
x[i] = r;
}
但是我觉得在for循环中制作所有内容似乎有点奇怪?这就是为什么我甚至要求有一个标准的程序来完成这项工作。
答案 0 :(得分:5)
只需使用以下内容:
#include <ctime>
#include <vector>
#include <cstdlib>
#include <algorithm>
...
// Create array
std::vector<int> arr(SIZE);
// std::array<int, SIZE> arr; // for a static array;
// Seed randomness
std::srand(std::time(NULL));
// Randomize values
std::generate(arr.begin(), arr.end(), &std::rand);
像普通数组一样使用数组:
for(int i = 0; i != arr.size(); ++i)
cout << arr[i] << endl;
无需delete[]
或其他因为vector
为您管理此事。
或者,您可以创建一个“随机”iterator
,它会产生随机值。这将允许您创建&amp;在创建时填充向量,结束结果将如下所示:std::vector<int> arr(rand_iterator(SIZE), rand_iterator());
但它更有效。
答案 1 :(得分:0)
试试这个:
int* array = new int[524288];
for (size_t k = 0; k < 524288; ++k)
array[k] = rand();
并且不要忘记之后删除数组。
答案 2 :(得分:0)
C ++ 11版本(但与VS2008不兼容):
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
#include <random>
int main() {
const int mem = 2*1024*1024;
const int cnt = mem/sizeof(int); // number of ints in 2MB :)
std::vector<int> v(cnt);
std::random_device rd;
std::uniform_int_distribution<> dis;
std::generate( std::begin(v), std::end(v), [&]{ return dis(rd); } );
return 0;
}