1. 根据高分辨率的时钟为种子,生成指定长度的随机 ID 的函数

    // 生成指定长度的随机 ID
    std::string randomId(size_t length) {
        using std::chrono::high_resolution_clock;
        static thread_local std::mt19937 rng(
            static_cast<unsigned int>(high_resolution_clock::now().time_since_epoch().count()));
        static const std::string characters(
            "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
        std::string id(length, '0');
        std::uniform_int_distribution<int> uniform(0, int(characters.size() - 1));
        std::generate(id.begin(), id.end(), [&]() { return characters.at(uniform(rng)); });
        return id;
    }
    using std::chrono::high_resolution_clock; // 这行代码引入了 `std::chrono::high_resolution_clock`,这是一个用于测量时间的标准库类。
    static thread_local std::mt19937 rng(
    static_cast<unsigned int>(high_resolution_clock::now().time_since_epoch().count()));

    这行代码定义了一个静态局部变量 rng ,它是一个 std::mt19937 类型的伪随机数生成器。通过使用当前时间的高分辨率时钟的计数作为种子,我们创建了一个每次函数调用时都会生成不同随机数序列的生成器。

    static const std::string characters(
    	"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");

    这行代码定义了一个静态常量字符串 characters ,它包含了用于生成随机 ID 的字符集。它包括数字、大写字母和小写字母。

    std::string id(length, '0');

    这行代码创建了一个名为 idstd::string 对象,长度为 length ,并将其初始化为由字符 '0' 组成的字符串。

    std::uniform_int_distribution<int> uniform(0, int(characters.size() - 1));

    这行代码定义了一个均匀分布的整数生成器 uniform ,它生成范围在 0characters.size() - 1 之间的整数。

    std::generate(id.begin(), id.end(), [&]() { return characters.at(uniform(rng)); });

    这行代码使用 std::generate 算法,将随机选择的字符填充到 id 字符串中。 generate 函数接受一个范围(由 id.begin()id.end() 表示),并使用 lambda 表达式作为生成器函数。lambda 表达式使用 characters 字符串和 uniform(rng) 生成的随机索引来填充字符。

更新于 阅读次数