Mar*_*dik 23 c++ c++-standard-library c++11
函数std :: shuffle已在C++ 11中引入:
template< class RandomIt, class URNG >
void shuffle( RandomIt first, RandomIt last, URNG&& g );
Run Code Online (Sandbox Code Playgroud)
它与std :: random_shuffle的重载之一具有相同的签名,这也是在C++ 11中引入的:
template< class RandomIt, class RandomFunc >
void random_shuffle( RandomIt first, RandomIt last, RandomFunc&& r );
Run Code Online (Sandbox Code Playgroud)
不同之处在于第三个参数,其中:
URNG必须满足UniformRandomNumberGenerator的要求
这都是?差异只是shuffle执行额外的编译时间检查吗?这个行为是否相同?
Naw*_*waz 20
std::random_shuffle使用std::rand()函数随机化项目,而std::shuffle使用urng是一个更好的随机生成器,虽然具有特定的重载std::random_shuffle,你可以得到相同的行为(如同std::shuffle),但这需要你做一些工作来传递第三个参数.
观看Stephan T. Lavavej的演讲,他在其中解释了为什么std::rand是一个糟糕的函数以及C++程序员应该使用的东西:
要点是,std::shuffle是一个改进std::random_shuffle,C++程序员应该更喜欢使用前者.
Dan*_*rey 14
如果您仔细阅读cppreference.com上的文档,您会发现RandomFunc传递的random_shuffle具有不同的接口.它被调用为r(n).这在C++ 11之前就存在了.
std::shuffle使用标准化的方式获取随机数和调用g().这个标准化的随机数生成器与C++ 11一起引入std::shuffle.
| 归档时间: |
|
| 查看次数: |
6571 次 |
| 最近记录: |