C++ std::random(C++11) std::mt19937 std::shuffle std::seed_seq 随机数生成算法

std::random_device

random_device 类定义的函数对象可以生成用来作为种子的随机的无符号整数值。

std::random_device rd; 

构造函数有一个 string& 类型的参数,它有定义的默认值。在我们像这样省略它时,会得到我们环境中默认的 random_device 对象。

用 random_device 对象生成一个种子值:

auto seed_value = rd();
std::seed_seq 种子序列

seed_seq 类是用来帮助设置随机数生成器的初始状态的,用来产生种子。

std::mt19937

std::mt19937是C++11加入的新特性,是一种高效的随机数生成算法。它的用法和rand()相似,但是具有速度快,周期长的特点。它的名字就来自于周期长度219937-1。而rand()在windows下生成的数据范围为0-32767。而这个函数的随机范围大概在(-maxint,+maxint)之间。

std::random_device rd;
std::mt19937 generator(rd()); 
std::shuffle

可以将列表中的内容进行随机排列。

简单的洗牌算法:

#include <random>
#include <algorithm>
#include <iterator>
#
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
std::atomic_thread_fence是C++中的一个原子操作函数,用于创建一个内存屏障,确保在调用该函数之前和之后的所有内存访问都按照顺序来执行。这个函数可以在多线程编程中用于确保可见性和顺序性的要求。 内存屏障是一种同步原语,用于控制内存操作的执行顺序和可见性。在多线程环境中,由于指令重排和缓存一致性等因素的存在,不同线程对共享变量的读写操作可能会出现不一致的情况。通过使用内存屏障,我们可以显式地指定一些内存操作的执行顺序,以避免这种问题。 std::atomic_thread_fence函数有几个重载形式,可以指定不同的内存顺序要求。它可以接受一个memory_order参数,用于指定内存访问的顺序保证。常见的memory_order选项有: - memory_order_relaxed:松散顺序,不对任何指针访问进行顺序约束。 - memory_order_acquire:获取顺序,确保当前线程对共享变量的读操作在本条原子操作之前完成。 - memory_order_release:释放顺序,确保当前线程对共享变量的写操作在本条原子操作之后完成。 - memory_order_acq_rel:获取-释放顺序,结合了acquire和release的特性,既确保读操作在之前完成,也确保写操作在之后完成。 - memory_order_seq_cst:顺序一致性,对所有线程的内存访问进行全局排序,保证各线程间的操作顺序一致。 这些memory_order选项可以灵活地根据具体的需求来选择,以实现所需的同步和顺序性要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值