RandX 1.4.3
基于 xoshiro/xoroshiro 算法族的纯头文件伪随机数生成器库
载入中...
搜索中...
未找到
统计分布

16 种标准统计分布便捷函数 更多...

统计分布 的协作图:

命名空间

namespace  RandX::detail

枚举

enum class  RandX::CharSet {
  RandX::CharSet::Alphanumeric , RandX::CharSet::Alpha , RandX::CharSet::Lower , RandX::CharSet::Upper ,
  RandX::CharSet::Digit , RandX::CharSet::Hex , RandX::CharSet::Printable , RandX::CharSet::Base64 ,
  RandX::CharSet::Base64UrlSafe , RandX::CharSet::Alphanumeric , RandX::CharSet::Alpha , RandX::CharSet::Lower ,
  RandX::CharSet::Upper , RandX::CharSet::Digit , RandX::CharSet::Hex , RandX::CharSet::Printable ,
  RandX::CharSet::Base64 , RandX::CharSet::Base64UrlSafe
}

函数

template<std::floating_point T = double>
RandX::RandNormal (T mean=T{0}, T stddev=T{1})
 生成正态分布随机数
template<class Engine, std::floating_point T = double>
RandX::RandNormal (Engine &engine, T mean=T{0}, T stddev=T{1})
 生成正态分布随机数(指定引擎重载)
template<std::ranges::random_access_range Container>
void RandX::RandShuffle (Container &&c)
 随机打乱容器
template<class It, class T>
requires detail::RandFillable<It, T> && std::integral<T>
void RandX::RandFill (It first, It last, T min, T max)
 用 [min, max] 范围的随机整数填充迭代器区间
template<class It, class T, class Engine>
requires detail::RandFillable<It, T> && std::integral<T>
void RandX::RandFill (Engine &engine, It first, It last, T min, T max)
 用 [min, max] 范围的随机整数填充迭代器区间(指定引擎重载)
template<std::integral T = int>
std::vector< T > RandX::RandVector (T min, T max, std::size_t n)
 生成含 n 个随机整数的 vector
template<std::integral T = int, class Engine>
std::vector< T > RandX::RandVector (Engine &engine, T min, T max, std::size_t n)
 生成含 n 个随机整数的 vector(指定引擎重载)
template<class WeightContainer>
WeightContainer::size_type RandX::RandWeighted (const WeightContainer &weights)
 按权重随机选取索引
template<class Engine, class WeightContainer>
WeightContainer::size_type RandX::RandWeighted (Engine &engine, const WeightContainer &weights)
 按权重随机选取索引(指定引擎重载)
template<class IntType>
IntType RandX::RandWeighted (std::discrete_distribution< IntType > &dist)
 按预构建权重分布随机选取索引(支持高频抽取复用,O(1) 复杂度)
template<class Engine, class IntType>
IntType RandX::RandWeighted (Engine &engine, std::discrete_distribution< IntType > &dist)
 按预构建权重分布随机选取索引(指定引擎,支持高频抽取复用,O(1) 复杂度)
template<std::integral T, class Engine>
RandX::RandInt (Engine &engine, T min, T max)
 生成 [min, max] 范围内的随机整数(指定引擎重载)
template<std::floating_point T, class Engine>
RandX::RandReal (Engine &engine, T min=T{0}, T max=T{1})
 生成 [min, max) 范围内的随机浮点数(指定引擎重载)
char RandX::RandChar (CharSet cs)
 从预设字符集随机取一个字符
template<class Engine>
char RandX::RandChar (Engine &engine, CharSet cs)
 从预设字符集随机取一个字符(指定引擎重载)
template<std::ranges::random_access_range Container>
auto RandX::RandSample (const Container &c, typename Container::size_type n)
 无放回抽样:从容器中随机抽取 n 个元素(Fisher-Yates 前 n 步)
template<std::random_access_iterator It>
std::vector< std::iter_value_t< It > > RandX::RandSample (It first, It last, std::iter_difference_t< It > n)
 无放回抽样(随机访问迭代器版,hash-set / 索引数组双分支)
template<std::random_access_iterator It, class Engine>
std::vector< std::iter_value_t< It > > RandX::RandSample (Engine &engine, It first, It last, std::iter_difference_t< It > n)
 无放回抽样(指定引擎,随机访问迭代器版)
std::vector< std::size_t > RandX::RandPermutation (std::size_t n)
 生成 [0, n) 的随机排列

详细描述

16 种标准统计分布便捷函数

枚举类型说明

◆ CharSet

enum class RandX::CharSet
strong
枚举值
Alphanumeric 
Alpha 
Lower 
Upper 
Digit 
Hex 
Printable 
Base64 
Base64UrlSafe 
Alphanumeric 
Alpha 
Lower 
Upper 
Digit 
Hex 
Printable 
Base64 
Base64UrlSafe 

函数说明

◆ RandChar() [1/2]

char RandX::RandChar ( CharSet cs)
inlinenodiscard

从预设字符集随机取一个字符

参数
cs预设字符集枚举
返回
从字符集中均匀选取的 char(预设集均为 ASCII 范围)
异常
std::invalid_argument字符集为空时抛出
函数调用图:

◆ RandChar() [2/2]

template<class Engine>
char RandX::RandChar ( Engine & engine,
CharSet cs )
inlinenodiscard

从预设字符集随机取一个字符(指定引擎重载)

参数
engine自定义随机数引擎
cs预设字符集枚举
返回
从字符集中均匀选取的 char
函数调用图:

◆ RandFill() [1/2]

template<class It, class T, class Engine>
requires detail::RandFillable<It, T> && std::integral<T>
void RandX::RandFill ( Engine & engine,
It first,
It last,
T min,
T max )
inline

用 [min, max] 范围的随机整数填充迭代器区间(指定引擎重载)

参数
engine自定义随机数引擎
first起始迭代器
last结束迭代器
min随机数下界(含)
max随机数上界(含)

◆ RandFill() [2/2]

template<class It, class T>
requires detail::RandFillable<It, T> && std::integral<T>
void RandX::RandFill ( It first,
It last,
T min,
T max )
inline

用 [min, max] 范围的随机整数填充迭代器区间

参数
first起始迭代器
last结束迭代器
min随机数下界(含)
max随机数上界(含)
注解
T 从 min/max 推导,不从迭代器 value_type 推导。 若容器元素类型与 min/max 字面量类型不一致,需显式指定 T 或用匹配类型的字面量。
函数调用图:

◆ RandInt()

template<std::integral T, class Engine>
T RandX::RandInt ( Engine & engine,
T min,
T max )
inlinenodiscard

生成 [min, max] 范围内的随机整数(指定引擎重载)

参数
engine自定义随机数引擎
min下界(含)
max上界(含)
返回
均匀分布于 [min, max] 的随机整数

◆ RandNormal() [1/2]

template<class Engine, std::floating_point T = double>
T RandX::RandNormal ( Engine & engine,
T mean = T{0},
T stddev = T{1} )
inlinenodiscard

生成正态分布随机数(指定引擎重载)

参数
engine自定义随机数引擎
mean均值(默认 0)
stddev标准差(默认 1)
返回
服从 N(mean, stddev) 的随机数

◆ RandNormal() [2/2]

template<std::floating_point T = double>
T RandX::RandNormal ( T mean = T{0},
T stddev = T{1} )
inlinenodiscard

生成正态分布随机数

参数
mean均值(默认 0)
stddev标准差(默认 1)
返回
服从 N(mean, stddev) 的随机数

◆ RandPermutation()

std::vector< std::size_t > RandX::RandPermutation ( std::size_t n)
inlinenodiscard

生成 [0, n) 的随机排列

参数
n排列长度
返回
含 0 到 n-1 随机排列的 vector
参数
n排列长度
返回
含 [0, n) 随机排列的 vector
函数调用图:

◆ RandReal()

template<std::floating_point T, class Engine>
T RandX::RandReal ( Engine & engine,
T min = T{0},
T max = T{1} )
inlinenodiscard

生成 [min, max) 范围内的随机浮点数(指定引擎重载)

参数
engine自定义随机数引擎
min下界(含,默认 0)
max上界(不含,默认 1)
返回
均匀分布于 [min, max) 的随机浮点数

◆ RandSample() [1/3]

template<std::ranges::random_access_range Container>
auto RandX::RandSample ( const Container & c,
typename Container::size_type n )
inlinenodiscard

无放回抽样:从容器中随机抽取 n 个元素(Fisher-Yates 前 n 步)

参数
c源容器
n抽取数量(若 n >= 容器大小则返回全部元素的副本)
返回
含 n 个随机选取元素的 vector
函数调用图:

◆ RandSample() [2/3]

template<std::random_access_iterator It, class Engine>
std::vector< std::iter_value_t< It > > RandX::RandSample ( Engine & engine,
It first,
It last,
std::iter_difference_t< It > n )
inlinenodiscard

无放回抽样(指定引擎,随机访问迭代器版)

参数
engine自定义随机数引擎
first范围起始迭代器
last范围结束迭代器
n抽取数量
返回
含 n 个随机选取元素的 vector
函数调用图:

◆ RandSample() [3/3]

template<std::random_access_iterator It>
std::vector< std::iter_value_t< It > > RandX::RandSample ( It first,
It last,
std::iter_difference_t< It > n )
inlinenodiscard

无放回抽样(随机访问迭代器版,hash-set / 索引数组双分支)

参数
first范围起始迭代器
last范围结束迭代器
n抽取数量
返回
含 n 个随机选取元素的 vector
函数调用图:

◆ RandShuffle()

template<std::ranges::random_access_range Container>
void RandX::RandShuffle ( Container && c)
inline

随机打乱容器

参数
c待打乱的容器
函数调用图:

◆ RandVector() [1/2]

template<std::integral T = int, class Engine>
std::vector< T > RandX::RandVector ( Engine & engine,
T min,
T max,
std::size_t n )
inlinenodiscard

生成含 n 个随机整数的 vector(指定引擎重载)

参数
engine自定义随机数引擎
min随机数下界(含)
max随机数上界(含)
n生成数量
返回
含 n 个均匀分布于 [min, max] 的随机整数 vector

◆ RandVector() [2/2]

template<std::integral T = int>
std::vector< T > RandX::RandVector ( T min,
T max,
std::size_t n )
inlinenodiscard

生成含 n 个随机整数的 vector

参数
min随机数下界(含)
max随机数上界(含)
n生成数量
返回
含 n 个均匀分布于 [min, max] 的随机整数 vector
函数调用图:

◆ RandWeighted() [1/4]

template<class WeightContainer>
WeightContainer::size_type RandX::RandWeighted ( const WeightContainer & weights)
inlinenodiscard

按权重随机选取索引

参数
weights权重容器(元素为数值类型)
返回
按权重概率选中的索引值
函数调用图:

◆ RandWeighted() [2/4]

template<class Engine, class WeightContainer>
WeightContainer::size_type RandX::RandWeighted ( Engine & engine,
const WeightContainer & weights )
inlinenodiscard

按权重随机选取索引(指定引擎重载)

参数
engine自定义随机数引擎
weights权重容器(元素为数值类型)
返回
按权重概率选中的索引值

◆ RandWeighted() [3/4]

template<class Engine, class IntType>
IntType RandX::RandWeighted ( Engine & engine,
std::discrete_distribution< IntType > & dist )
inlinenodiscard

按预构建权重分布随机选取索引(指定引擎,支持高频抽取复用,O(1) 复杂度)

参数
engine自定义随机数引擎
dist预构建的 std::discrete_distribution 对象
返回
按权重概率选中的索引值

◆ RandWeighted() [4/4]

template<class IntType>
IntType RandX::RandWeighted ( std::discrete_distribution< IntType > & dist)
inlinenodiscard

按预构建权重分布随机选取索引(支持高频抽取复用,O(1) 复杂度)

参数
dist预构建的 std::discrete_distribution 对象
返回
按权重概率选中的索引值
函数调用图: