std::shuffle-c++
- template <class RandomAccessIterator, class URNG>
- void shuffle (RandomAccessIterator first, RandomAccessIterator last, URNG&& g);
函数功能:使用随机生成器g对元素[first, last)可行交换的容器内部元素进行随机排列,大概原理类似如下代码的功能
- template <class RandomAccessIterator, class URNG>
- void shuffle (RandomAccessIterator first, RandomAccessIterator last, URNG&& g)
- {
- for (auto i = (last-first) - 1; i > 0; --i) {
- std::uniform_int_distribution<decltype(i)> d (0,i);
- swap (first[i], first[d (g)]);
- }
- }
函数必须与标准库默认的随机生成器一起使用,随机生成器的头文件是<random>。如果要使用不需要传入随机生成器函数可以参照random_shuffle函数。
first, last顺序容器迭代器的开头(begin)和结尾(end),在[first, end)这个区间内的数值将会被随机排序。顺序容器的迭代器必须是定义有swap函数的数据类型以及顺序容器也必须支持元素可交换。g唯一随机数生成器的一个实例,在头文件<random>中定义。URNG 是 uniform random number generator的缩写。
None
用例:
- #include <iostream>
- #include <vector>
- #include <algorithm> // std::move_backward
- #include <random> // std::default_random_engine
- #include <chrono> // std::chrono::system_clock
- int main (int argc, char* argv[])
- {
- std::vector<int> v;
- for (int i = 0; i < 10; ++i) {
- v.push_back (i);
- }
- // obtain a time-based seed:
- unsigned seed = std::chrono::system_clock::now ().time_since_epoch ().count ();
- std::shuffle (v.begin (), v.end (), std::default_random_engine (seed));
- for (auto& it : v) {
- std::cout << it << " ";
- }
- std::cout << "\n";
- return 0;
- }
g++ main.cpp -o shuffle -std=c++0x
6 4 2 3 7 8 5 1 9 0
4 7 3 6 8 0 2 9 5 1
转载于:https://www.cnblogs.com/lx-hhxxttxs/p/5908213.html
std::shuffle-c++相关推荐
- C++11新式洗牌std::shuffle与老式洗牌函数std::random_shuffle的区别
文章目录 前言 洗牌算法 std::random_shuffle rand 和 srand 随机数生成器和分布器 std::shuffle randint 总结 前言 洗牌算法是项目开发中常用的一种算 ...
- 【c++】映射表std::map
文章内容为网络搜集内容 std::map 映射表(Map)容器是一个按特定顺序存储以键值对组合而成的元素的关联容器 // <map> template < class Key,cla ...
- 如何 shuffle 一个 vector 以及 vectorvector
Shuffle 是一种特殊的 permutation,是从所有 permutations 的随机等概率挑选其中之一. shuffle 一个容器([first, last)),也即将 [first, l ...
- C++拾取——使用stl标准库实现排序算法及评测
今天看了一篇文章,讲各种语言的优势和劣势.其中一个观点:haskell非常适合写算法,因为使用者不用去关心具体的计算机实现,而只要关注于操作语义.这让它在专心研究算法的人中非常受欢迎.所以很多时候,语 ...
- C++/C++11中头文件algorithm的使用
<algorithm>是C++标准程序库中的一个头文件,定义了C++ STL标准中的基础性的算法(均为函数模板).<algorithm>定义了设计用于元素范围的函数集合.任何对 ...
- 【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)
排列操作(Permutation operations) 一.is_permutation 1.原型: template< class ForwardIt1, class ForwardIt2 ...
- 【C++】C++11 STL算法(六):最小/最大操作(Minimum/maximum operations)、比较运算(Comparison operations)
目录 最小/最大操作(Minimum/maximum operations) 一.max 1.原型: 2.说明: 3.官方demo 二.max_element 1.原型: 2.说明: 3.官方demo ...
- 【C++】C++11 STL算法(三):分隔操作(Partitioning operations)、排序操作(Sorting operations)
目录 分隔操作(Partitioning operations) 一.is_partitioned 1.原型: 2.说明: 3.官网demo 二.partition 1.原型: 2.说明: 3.官方d ...
- 【C++】C++11 STL算法(二):修改序列的操作(Modifying sequence operations)
目录 一.copy.copy_if 1.原型: 2.说明: 3.官方demo 二.copy_n 1.原型: 2.说明: 3.官方demo 三.copy_backward 1.原型: 1.说明: 1.官 ...
最新文章
- pytorch 笔记:DataLoader 扩展:构造图片DataLoader
- python 作用with_即使__init__方法有效,Python中的With语句仍返...
- Android 5中不同效果的Toast
- java文件异步上传_[Java教程]原生javascript实现文件异步上传
- SAP UI5 初学者教程之十五 - 对话框和 Fragments 的使用方式试读版
- DjangoORM字段介绍
- python按位翻转_Python成为专业人士笔记-位操作符
- 中国武侠片的50条爆笑定律
- Vue之代码自动格式化
- 云计算具有什么平台_工业云平台具有哪些功能?
- 相分离相关文章阅读Liquid–liquid phase separation in cellular signaling systems
- pip install -r requirements.txt 超时解决方案
- 一般纳米材料是指尺度为_水溶性单分散纳米材料的开发意义
- TensorFlow 强化学习快速入门 -- Kaushik Balakrishnan 读后感
- 软件工程毕业设计选题java_软件工程毕业设计选题
- 苹果铃声制作(流水是操作记录)
- 使命召唤 高级战争 闪退_使命召唤:现代战争进入第5季
- 查看系统架构是32位还是64位--用Enki学Linux系列(15)
- RN8215芯片 32768Hz晶体停振案例分析
- 【原创纯手打】如何使用Vue写微信朋友圈中的留言回复功能(附源码)