【发布时间】:2013-10-07 08:04:10
【问题描述】:
函数std::shuffle已在C++11中引入:
template< class RandomIt, class URNG >
void shuffle( RandomIt first, RandomIt last, URNG&& g );
它与std::random_shuffle 的重载之一具有相同的签名,这也是在 C++11 中引入的:
template< class RandomIt, class RandomFunc >
void random_shuffle( RandomIt first, RandomIt last, RandomFunc&& r );
区别在于第三个参数:
URNG 必须满足 UniformRandomNumberGenerator 的要求
就这些了吗?区别仅仅是shuffle 执行了额外的编译时间检查吗?其他行为是否相同?
【问题讨论】:
-
顺便说一句,在标准中“X 必须满足 Y 的要求”并不意味着实现会检查它。这意味着如果 X 未能满足 Y 的要求,则行为未定义。在任何模板代码中都会有一些编译时检查,但通常只检查实现实际使用的接口 Y 的部分。
标签: c++ c++11 c++-standard-library