本文介绍了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<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
>` 头文件中提供的随机数生成器和分布来自己实现随机排列算法。