我尝试在循环中调用rand()函数迭代n次,但生成的数字不是唯一的。所以请建议任何函数或逻辑来生成从0到n的n个随机数。
答案 0 :(得分:3)
如果你需要产生值[0,n]的随机shuffle(即0,1,2,... n-1),那么下面的代码(改编自cppreference.com)将执行特技:
#include <numeric>
#include <algorithm>
#include <vector>
vector<int> shuffled_vector( int n )
{
std::vector<int> v(n);
std::iota(v.begin(), v.end(), 0);
std::random_shuffle(v.begin(), v.end());
return v;
}
关于cppreference的原始示例涉及更多。在此处找到它:http://en.cppreference.com/w/cpp/algorithm/iota
如果您有特殊需要,可以向std::random_shuffle
提供随机数生成器。这是v.end()
之后的第三个论点。更多详情:http://en.cppreference.com/w/cpp/algorithm/random_shuffle
答案 1 :(得分:0)
这在很大程度上取决于您需要获得的唯一数字组合的概率分布。
最直接(但很慢)的方法是生成随机数,跳过克隆,直到你热n
个数字。在这种情况下,您将获得唯一n个数字组合的统一概率分布。