首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11多随机数引擎适配器

C++11多随机数引擎适配器
EN

Stack Overflow用户
提问于 2015-05-03 22:23:33
回答 1查看 384关注 0票数 3

是否可以在C++11中同时使用由STL提供的随机引擎和多个适配器?

例如,使用带有废块发动机适配器的Mersenne引擎(来自基引擎生成的大小P的每个块,适配器只保留R号,丢弃其余的)和洗牌订购引擎适配器 (以不同的顺序传递随机数引擎的输出)。

为不知道的人使用的引擎适配器示例:

代码语言:javascript
复制
//some code here to create a valid seed sequence
mt19937 eng(mySeedSequence);
discard_block_engine<mt19937,11,5> discardWrapper(eng);
shuffle_order_engine<mt19937,50> shuffleWrapper(eng);

for (int i=0; i<100; ++i) {
  //for every 5 calls to "discardWrapper()", the twister engine 
  //advances by 11 states (6 random numbers are thrown away)
  cout << discardWrapper() << endl;
}

for (int i=0; i<100; ++i) {
  //essentially 50 random numbers are generated from the Twister
  //engine and put into a maintained table, one is then picked from
  //the table, not necessarily in the order you would expect if you
  //knew the internal state of the engine
  cout << shuffleWrapper() << endl;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-03 22:37:40

是的,你能做到的。您只需要根据另一个适配器类型定义一个适配器类型:

代码语言:javascript
复制
typedef std::discard_block_engine<std::mt19937, 11, 5> discard_engine_t;
typedef std::shuffle_order_engine<discard_engine_t, 50> shuffle_engine_t;

std::mt19937 mt_eng;
discard_engine_t discard_eng(mt_eng);
shuffle_engine_t shuffle_eng(discard_eng);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30020107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档