c++ - 在C++中随机生成最多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/

相关文章:

c++ - 没有运算符(operator)发现 boost read_xml 函数错误

依赖于编译器特定代理的 C++11 库功能

c++ - 如何在 C++ 中安全地销毁 Posix 线程池

c++ - 传递智能指针的更简洁的替代方案

c++ - 更改 Windows DLL 加载顺序? (加载顺序,不是搜索顺序)

c++ - 为什么 boost::any 禁止转发 const&&?

c++ - 缓冲区的套接字队列问题

C++ 构建错误 - '{' 标记之前的预期类名|

c++ - C 标记化字符串

c++ - WinXP 上带有 C 运行时库 2011 的无效 Win32 程序