假设您正在处理需要随机数的(严重)项目。
如下的行:
app.run(threaded=True)
(显然)不会出现在那里。 C ++ 11标题int num = rand() % 6 + 5; //random number between 5 - 10
毫无疑问地击败了这个旧的C风格。
<random>
但是当在一个小组工作时,我可以看到这个方法存在两个问题:
语法很难阅读。
对于这么常见的简单任务来说太复杂了。
所以有一个函数(基于这个方法)看起来真的很好:
std::random_device rd;
std::mt19937 engine(rd());
std::uniform_int_distribution<int> generate(5, 10);
int num = generate(engine);
就我而言,没有这样的STL功能。所以我要求你的经验:你可以自己实现这个功能吗?也许导出到一个单独的标题,然后重载它为双打和浮动等。 我问这个问题,因为在这个现代C ++时代,使用STL函数的标准是,这种情况下语法实际上迫使你自己实现。谢谢你的帮助和帮助关于这个主题的经验。
编辑:最后我要问的是,在处理随机数的任何项目中,这样的实现总是会发生(迟早)。
答案 0 :(得分:4)
C ++的一个关键目标是使编写特定于域的抽象变得容易;如果您正在编写经常使用特定形式的随机数生成的代码,请务必将其封装在适当的函数中。
答案 1 :(得分:1)
在TS 2中有randint
,但它可能无法进入C ++ 17。
所以现在如果你不能/不会使用<experimental/...>
,那么实施你自己是有意义的。考虑使用thread_local
引擎。
int getRandom(int range_begin, int range_end)
{
thread_local std::mt19937 engine(std::random_device{}());
std::uniform_int_distribution<int> generate(range_begin, range_end);
return generate(engine);
}
在大多数架构中,它仍然只用32位随机性初始化engine
,但这对你来说已经足够了。