【发布时间】:2021-12-23 22:33:55
【问题描述】:
这是来自https://en.cppreference.com/w/cpp/algorithm/random_shuffle的算法std::shuffle:
template<class RandomIt, class URBG> void shuffle(RandomIt first, RandomIt last, URBG&& g) { typedef typename std::iterator_traits<RandomIt>::difference_type diff_t; typedef std::uniform_int_distribution<diff_t> distr_t; typedef typename distr_t::param_type param_t; distr_t D; diff_t n = last - first; for (diff_t i = n-1; i > 0; --i) { using std::swap; swap(first[i], first[D(g, param_t(0, i))]); } }
-
为什么算法需要对生成器
URGB&& g的转发引用?只要它不使用std::forward<URGB>(g)将生成器作为左值或右值转发? -
为什么 using 声明在循环体内部而不是在循环体外部?将其留在内部(迭代地)会影响性能吗?谢谢!
【问题讨论】:
-
因为它是由核心人员编写的。这个问题的目标是什么?这不是您阅读的代码
标签: c++ algorithm shuffle forwarding-reference