我有一个多图,其中有1000个数字。现在我需要生成一个随机数。说它560.然后我将采取阵列的第560个元素。我用兰特。
int number = 0;
int size = mmap.size();
int rand = rand() % size + 1;
但问题是,我正在运行这个程序n次。每次,我得到相同数量的随机值。每次运行程序时如何生成随机值。
i tried using including random library. it gave error when i compile.
答案 0 :(得分:8)
答案 1 :(得分:4)
你需要用随机数来种子。试试srand (time(NULL));
答案 2 :(得分:1)
除了播种随机数生成器之外,我建议您尽可能完全避免使用rand()
。它通常不是一个非常好的pRNG,并且常见的用法(例如rand() % size
)会产生偏差的结果。如果可用,更好的替代方法是标准C ++ <random>
库。
<random>
优于rand()
的一些好处:
示例:
#include <random>
#include <iostream>
#include <functional>
int main() {
std::random_device r;
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
std::mt19937 e(seed);
int size = 10;
std::uniform_int_distribution d(1,size);
std::cout << d(e) << '\n';
}
如果更适合您的使用,您还可以将所有内容绑定到一个函数对象中。
#include <functional>
std::random_device r;
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
auto rand = std::bind(std::uniform_int_distribution<>(1,size),
std::mt19937(seed));
std::cout << rand() << '\n';