为什么c++14把random_shuffle标为deprecated

 我来答
百度网友ab2ed29
推荐于2017-10-21
知道答主
回答量:6
采纳率:0%
帮助的人:7.3万
展开全部

random_shuffle有两种形式,即

template<class RandomAccessIterator>
void random_shuffle(RandomAccessIterator first, RandomAccessIterator last);

template<class RandomAccessIterator, class RandomNumberGenerator>
void random_shuffle(RandomAccessIterator first, RandomAccessIterator last,
                    RandomNumberGenerator&& rnd);

二者被deprecated(即不推荐使用)的原因并不一样。

  • 前者使用编译器指定的随机数发生器来打乱数组的内容,这个随机数发生器通常是rand函数,它被deprecated的原因也和rand函数有关。由于rand函数是C语言的遗留产物,不同编译器实现方法不一样,产生随机数的可靠性也千差万别,并且C++11提供了一整套明确规定了算法的随机数发生器(位于<random>头文件)。有人提议把rand函数标为deprecated,来让更多的人使用C++11提供的“更好的东西”。使用rand函数的random_shuffle也被连带标为deprecated。

  • 后者要求rnd仿函数(只能是仿函数)产生的随机数的范围就是数组的下标范围,这样的仿函数通常不是很容易写,完全可以被更好的东西代替——这个更好的东西就是shuffle函数

shuffle函数与random_shuffle的第二种形式相似,同样是接受一个仿函数,但对随机数的范围要求更松,因而可以直接传一个std::mt19997对象,或者std::random_device对象(都是C++11直接提供的随机数发生器)的进去,更便于使用,同时不像rand一样,不能保证打乱结果的可靠性

BlueWanderer
2017-10-21 · TA获得超过9209个赞
知道大有可为答主
回答量:5673
采纳率:83%
帮助的人:2009万
展开全部
shuffle和random_shuffle对参数的要求不一样,而前者是新的,所以没必要一直维护老的啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-05
展开全部
因为rand被deprecated,使用它的random_shuffle自然也被deprecated注意random_shuffle有两个重载版本,只有一个被deprecated
更多追问追答
追答
我曾经写的个求数独的程序靠random_shuffle提升了n倍的性能
CZ,话说支持C++14的编辑器/IDE有内些?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式