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

在学习 <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;
    }
}

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

阅读 3.9k
1 个回答
我的理解是 : 当给定的种子不是太好或者一个线性列表内的种子分布不好的时候, 但又需要大量的随机引擎或者大量熵的生成器的时候, 可以使用 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...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题