<分区>
我曾尝试在循环中调用 rand() 函数,该循环迭代 n 次,但生成的数字不是唯一的。因此,请提出任何函数或逻辑来生成从 0 到 n 的 n 个随机数。
标签 c++
<分区>
我曾尝试在循环中调用 rand() 函数,该循环迭代 n 次,但生成的数字不是唯一的。因此,请提出任何函数或逻辑来生成从 0 到 n 的 n 个随机数。
最佳答案
如果您需要对值 [0,n)(即 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
关于c++ - 在C++中随机生成最多n的唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20309237/