是否可以这么理解 std::seed_seq?

发布于 2022-09-07 07:46:48 字数 648 浏览 23 评论 0

在学习 <random> 库的时候, 唯独 seed_seq 看的不是很明白
尽管去 MSDN 看了, 还有 cppreference, 但是都还不是非常明
Google 上对于 seed_seq 的资料太少了
我的理解是 : 当给定的种子不是太好或者一个线性列表内的种子分布不好的时候, 但又需要大量的随机引擎或者大量熵的生成器的时候, 可以使用 seed_seq
根据 cppreference 的英文介绍, 大概就是这么理解的

一个好像看懂又觉得不懂的例子 :

#include <iostream>
#include <random>

using namespace std;
int main(int argc, char *argv[]) {
    seed_seq seq {1, 2, 3, 4, 5};
    vector<int> vec(10);
    seq.generate(vec.begin(), vec.end());
    for(const auto &c : vec) {
        cout << c << endl;
    }
}

不知道我的理解是否正确, 或者各位能否给出一些更详细的解释以及例子呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

作死小能手 2022-09-14 07:46:48

我的理解是 : 当给定的种子不是太好或者一个线性列表内的种子分布不好的时候, 但又需要大量的随机引擎或者大量熵的生成器的时候, 可以使用 seed_seq.

std::seed_seq is generally intended to be used if you don't trust the default implementation to properly initialize the state of the engine you're using.1

能否给出一些更详细的解释以及例子呢?

https://stackoverflow.com/a/2...

或许该看些密码学的书? 窝这学期刚开学时兴致冲冲的拿着一本密码学原版(从大数讲起的, 有很多c实现, 不过后来因为太忙太懒了, 没有看下去(惭愧不已). 里面第十二章就是讲随机数的, 虽然窝还没有看到, 但是窝觉得这本书非常不错, 非常偏向实战, 理论也讲的很不错. 就是国内没什么知名度. 所以在这里想你推荐下, 你学random库肯定发现需要很多数论的知识吧.

https://www.amazon.com/Crypto...

国内有引进的原版, 你可以自己搜下.


  1. https://stackoverflow.com/a/4...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文