添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文介绍了STL中的random_shuffle函数,该函数用于将指定范围内的元素随机重排。文章提到了函数的原型和其在算法设计中的应用,特别引用了《计算机程序设计艺术》中的相关分析。同时,给出了一个简单的使用示例来展示函数效果。 摘要由CSDN通过智能技术生成

上次写遗传算法用到STL里的random_shuffle函数,算法的主要思想在《计算机程序设计艺术》的3.4.2节有详细的分析,现在这里简单说明一下算法的实现。

应包含头文件:

#include<algorithm>

函数原型:

SGI版本一

template <class RandomAccessIterator>
inline void random_shuffle(RandomAccessIterator first, RandomAccessIterator last) {
	__random_shuffle(first, last, distance_type(first));
template <class RandomAccessIterator, class Distance>
void __random_shuffle(RandomAccessIterator first, RandomAccessIterator last, Distance*) {
	if (first == last)
		return;
	for (RandomAccessIterator i = first + 1; i != last; ++i)
#ifdef __STL_NO_DRAND48         //DRAND48和LRAND48都是基于均匀分布区间上的随机函数
		iter_swap(i, first + Distance(rand() % ((i - first) + 1)));
#else
		iter_swap(i, first + Distance(lrand48() % ((i - first) + 1)));
#endif
}
SGI版本二
C++中除了使用rand和srand 函数 产生随机数,STL中提供了一个更便捷的方法,即 random _ shuffle 函数 。 这篇博客主要总结一下 random _ shuffle ()的用法,rand和srand 函数 可以参考我的另一篇博客: C++随机数:rand和srand 函数 总结 https://blog.csdn.net/m0_49070560/article/details/108557117. 接下来我们说 random _ shuffle ()。 random _ shuffle () 函数 原型如下: template
STL中的 函数 random _ shuffle ()用来对一个元素序列进行重新排序(随机的) srand(time(0)); 这个是设置时间种子,加了这句才能保证每次都是随机的,不然就不太随机。 #include<bits/stdc++.h> using namespace std; int main() srand(time(0)); int a[5] = {5,2,2,4,1}; random _ shuffle .
转自:https://blog.csdn.net/vivi_wang_11/article/details/7441803 其他文章:https://blog.csdn.net/lionet_whitney/article/details/51086172 STL中的 函数 random _ shuffle ()用来对一个元素序列进行重新排序(随机的), 函数 原型如下: template&lt;cla...
重排序给定范围 [first, last) 中的元素,使得这些元素的每个排列拥有相等的出现概率。 1) 随机数生成器是实现定义的,但经常使用 函数 std::rand 。 2) 随机数生成器为 函数 对象 r 。 3) 随机数生成器为 函数 对象 g 。
C++中的 ` random _ shuffle ` 函数 是一个标准库算法,用于随机地重新排列给定范围内的元素。这个 函数 是在 `<algorithm>` 头文件中声明的,并且可以在C++98标准中使用。从C++14开始,` random _ shuffle ` 已被移除标准库,建议使用 `std:: shuffle ` 或其他方法来达到相同的随机排列效果。 ` random _ shuffle ` 函数 有两种重载形式: 1. 使用默认的随机数生成器: ```cpp void random _ shuffle ( Random AccessIterator first, Random AccessIterator last); 这个版本使用一个默认的随机数发生器来打乱从 `first` 到 `last`(不包括 `last`)的元素顺序。 2. 使用特定的随机数生成器: ```cpp void random _ shuffle ( Random AccessIterator first, Random AccessIterator last, Random NumberGenerator& gen); 这个版本接受一个额外的随机数生成器参数 `gen`,用于生成随机数序列,从而决定元素的排列。 使用 ` random _ shuffle ` 的示例代码如下: ```cpp #include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> myvector {1, 2, 3, 4, 5, 6, 7, 8, 9}; // 使用默认随机数生成器打乱元素 std:: random _ shuffle (myvector.begin(), myvector.end()); // 输出打乱后的元素 for (int i : myvector) { std::cout << i << ' '; std::cout << '\n'; return 0; 由于C++14之后标准库不再支持 ` random _ shuffle `,可以考虑以下替代方法: 1. 使用 `std:: shuffle `,它需要一个额外的随机数生成器,如 `< random >` 头文件中的 `std::default_ random _engine`。 2. 使用 `< random >` 头文件中提供的随机数生成器和分布来自己实现随机排列算法。