如何创建一个2MB的数组或向量,并用随机整数填充它

时间:2014-01-29 11:23:47

标签: c++ arrays vector io

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

有一种简单的方法吗?

感谢。

我想要做那样的事情:

int x[1048576];

for (int i=1; i<1048576; i++)
{
    int r = rand()%i;
    x[i] = r;
}

但是我觉得在for循环中制作所有内容似乎有点奇怪?这就是为什么我甚至要求有一个标准的程序来完成这项工作。

3 个答案:

答案 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;
}