Namespaces
Variants

Standard library header <random> (C++11)

From cppreference.net
Standard library headers

此头文件属于 伪随机数生成 库的一部分。

目录

包含文件

std::initializer_list 类模板

Concepts

均匀随机比特生成器要求
指定类型符合均匀随机比特生成器的要求
(concept)

随机数引擎
实现 线性同余 算法
(类模板)
实现 梅森旋转算法
(类模板)
实现带借位减法( 延迟斐波那契 )算法
(类模板)
基于计数器的可并行化生成器
(类模板)
随机数引擎适配器
舍弃随机数引擎的部分输出
(类模板)
将随机数引擎的输出打包成指定位数的块
(类模板)
以不同顺序输出随机数引擎的结果
(类模板)
预定义生成器
minstd_rand0 (C++11) std:: linear_congruential_engine < std:: uint_fast32_t ,
16807 , 0 , 2147483647 >

由Lewis、Goodman和Miller于1969年发现,1988年被Park和Miller采纳为"最小标准"

minstd_rand (C++11)

std:: linear_congruential_engine < std:: uint_fast32_t ,
48271 , 0 , 2147483647 >
更新的"最小标准"生成器,由Park、Miller和Stockmeyer在1993年提出并推荐使用

mt19937 (C++11)

std:: mersenne_twister_engine < std:: uint_fast32_t ,
32 , 624 , 397 , 31 ,
0x9908b0df , 11 ,
0xffffffff , 7 ,
0x9d2c5680 , 15 ,
0xefc60000 , 18 , 1812433253 >
松本和西村于1998年开发的32位梅森旋转算法

mt19937_64 (C++11)

std:: mersenne_twister_engine < std:: uint_fast64_t ,
64 , 312 , 156 , 31 ,
0xb5026f5aa96619e9 , 29 ,
0x5555555555555555 , 17 ,
0x71d67fffeda60000 , 37 ,
0xfff7eee000000000 , 43 ,
6364136223846793005 >
松本与西村开发的64位梅森旋转算法,2000年

ranlux24_base (C++11) std:: subtract_with_carry_engine < std:: uint_fast32_t , 24 , 10 , 24 >
ranlux48_base (C++11) std:: subtract_with_carry_engine < std:: uint_fast64_t , 48 , 5 , 12 >
ranlux24 (C++11) std:: discard_block_engine < std:: ranlux24_base , 223 , 23 >

由 Martin Lüscher 和 Fred James 于 1994 年开发的 24 位 RANLUX 生成器

ranlux48 (C++11) std:: discard_block_engine < std:: ranlux48_base , 389 , 11 >

由 Martin Lüscher 和 Fred James 于1994年开发的48位RANLUX生成器

knuth_b (C++11) std:: shuffle_order_engine < std:: minstd_rand0 , 256 >
philox4x32 (C++26) std:: philox_engine < std:: uint_fast32_t , 32 , 4 , 10 ,
0xCD9E8D57 , 0x9E3779B9 ,
0xD2511F53 , 0xBB67AE85 >
philox4x64 (C++26) std:: philox_engine < std:: uint_fast64_t , 64 , 4 , 10 ,
0xCA5A826395121157 , 0x9E3779B97F4A7C15 ,
0xD2E7470EE14C6C93 , 0xBB67AE8584CAA73B >
default_random_engine (C++11) 一个实现定义的 RandomNumberEngine 类型
非确定性随机数
使用硬件熵源的非确定性随机数生成器
(类)
均匀分布
生成在范围内均匀分布的整数值
(类模板)
生成在范围内均匀分布的实数值
(类模板)
伯努利分布
生成基于 伯努利分布 bool
(类)
生成符合 二项分布 的整数值
(类模板)
生成服从 负二项分布 的整数值
(类模板)
生成服从 几何分布 的整数值
(类模板)
泊松分布
生成服从 泊松分布 的整数值
(类模板)
生成遵循 指数分布 的实数值
(类模板)
生成服从 伽马分布 的实数值
(类模板)
生成服从 威布尔分布 的实数值
(类模板)
生成符合 极值分布 的实数值
(类模板)
正态分布
生成服从 标准正态(高斯)分布 的实数值
(类模板)
生成服从 对数正态分布 的实数值
(类模板)
生成服从 卡方分布 的实数值
(类模板)
生成服从 柯西分布 的实数值
(类模板)
生成服从 F-分布 的实数值
(类模板)
生成服从 学生t分布 的实数值
(类模板)
抽样分布
生成基于离散分布的整数值
(类模板)
生成在恒定子区间上分布的实数值
(类模板)
在定义的子区间上生成服从线性分布的实数值
(类模板)
实用工具
(C++11)
通用型消除偏差的加扰种子序列生成器
(类)

函数

以给定精度在区间 [ 0 , 1 ) 上均匀分布实数值
(函数模板)
使用均匀随机位生成器填充范围内的随机数
(算法函数对象)

概要

#include <initializer_list>
namespace std {
  // uniform random bit generator requirements
  template<class G>
  concept uniform_random_bit_generator = /* 查看描述 */; // freestanding
  // 类模板 linear_congruential_engine
  template<class UIntType, UIntType a, UIntType c, UIntType m>
  class linear_congruential_engine;                             // partially freestanding
  // class template mersenne_twister_engine
  template<class UIntType,
           size_t w,
           size_t n,
           size_t m,
           size_t r,
           UIntType a,
           size_t u,
           UIntType d,
           size_t s,
           UIntType b,
           size_t t,
           UIntType c,
           size_t l,
           UIntType f>
  class mersenne_twister_engine;                                // partially freestanding
  // class template subtract_with_carry_engine
  template<class UIntType, size_t w, size_t s, size_t r>
  class subtract_with_carry_engine;                             // partially freestanding
  // 类模板 discard_block_engine
  template<class Engine, size_t p, size_t r>
  class discard_block_engine;                                   // partially freestanding
  // 类模板 independent_bits_engine
  template<class Engine, size_t w, class UIntType>
  class independent_bits_engine;                                // partially freestanding
  // 类模板 shuffle_order_engine
  template<class Engine, size_t k>
  class shuffle_order_engine;
  // 类模板 philox_engine
  template<class UIntType, size_t w, size_t n, size_t r, UIntType... consts>
  class philox_engine;                                          // partially freestanding
  // 具有预定义参数的引擎和引擎适配器
  using minstd_rand0          = /* 查看描述 */;          // freestanding
  using minstd_rand           = /* 查看描述 */;          // freestanding
  using mt19937               = /* 查看描述 */;          // freestanding
  using mt19937_64            = /* 查看描述 */;          // freestanding
  using ranlux24_base         = /* 查看描述 */;          // freestanding
  using ranlux48_base         = /* 查看描述 */;          // freestanding
  using ranlux24              = /* 查看描述 */;          // 独立环境
  using ranlux48              = /* 查看描述 */;          // freestanding
  using knuth_b               = /* 查看描述 */;
  using philox4x32            = /* 查看描述 */;          // freestanding
  using philox4x64            = /* 查看描述 */;          // freestanding
  using default_random_engine = /* 查看描述 */;
  // class random_device
  class random_device;
  // class seed_seq
  class seed_seq;
  // 函数模板 generate_canonical
  template<class RealType, size_t digits, class URBG>
  RealType generate_canonical(URBG& g);
  namespace ranges {
    // generate_random
    template<class R, class G>
      requires output_range<R, invoke_result_t<G&>> &&
               uniform_random_bit_generator<remove_cvref_t<G>>
    constexpr borrowed_iterator_t<R> generate_random(R&& r, G&& g);
    template<class G, output_iterator<invoke_result_t<G&>> O, sentinel_for<O> S>
      requires uniform_random_bit_generator<remove_cvref_t<G>>
    constexpr O generate_random(O first, S last, G&& g);
    template<class R, class G, class D>
      requires output_range<R, invoke_result_t<D&, G&>> && invocable<D&, G&> &&
               uniform_random_bit_generator<remove_cvref_t<G>> &&
               is_arithmetic_v<invoke_result_t<D&, G&>>
    constexpr borrowed_iterator_t<R> generate_random(R&& r, G&& g, D&& d);
    template<class G, class D,
             output_iterator<invoke_result_t<D&, G&>> O, sentinel_for<O> S>
      requires invocable<D&, G&> && uniform_random_bit_generator<remove_cvref_t<G>> &&
               is_arithmetic_v<invoke_result_t<D&, G&>>
    constexpr O generate_random(O first, S last, G&& g, D&& d);
  }
  // class template uniform_int_distribution
  template<class IntType = int>
  class uniform_int_distribution;                               // partially freestanding
  // 类模板 uniform_real_distribution
  template<class RealType = double>
  class uniform_real_distribution;
  // class bernoulli_distribution
  class bernoulli_distribution;
  // 类模板 binomial_distribution
  template<class IntType = int>
  class binomial_distribution;
  // 类模板 geometric_distribution
  template<class IntType = int>
  class geometric_distribution;
  // class template negative_binomial_distribution
  template<class IntType = int>
  class negative_binomial_distribution;
  // 类模板 poisson_distribution
  template<class IntType = int>
  class poisson_distribution;
  // 类模板 exponential_distribution
  template<class RealType = double>
  class exponential_distribution;
  // class template gamma_distribution
  template<class RealType = double>
  class gamma_distribution;
  // 类模板 weibull_distribution
  template<class RealType = double>
  class weibull_distribution;
  // 类模板 extreme_value_distribution
  template<class RealType = double>
  class extreme_value_distribution;
  // class template normal_distribution
  template<class RealType = double>
  class normal_distribution;
  // class template lognormal_distribution
  template<class RealType = double>
  class lognormal_distribution;
  // 类模板 chi_squared_distribution
  template<class RealType = double>
  class chi_squared_distribution;
  // 类模板 cauchy_distribution
  template<class RealType = double>
  class cauchy_distribution;
  // 类模板 fisher_f_distribution
  template<class RealType = double>
  class fisher_f_distribution;
  // 类模板 student_t_distribution
  template<class RealType = double>
  class student_t_distribution;
  // 类模板 discrete_distribution
  template<class IntType = int>
  class discrete_distribution;
  // 类模板 piecewise_constant_distribution
  template<class RealType = double>
  class piecewise_constant_distribution;
  // 类模板 piecewise_linear_distribution
  template<class RealType = double>
  class piecewise_linear_distribution;
}

概念 uniform_random_bit_generator

namespace std {
  template<class G>
  concept uniform_random_bit_generator =
    invocable<G&> && unsigned_integral<invoke_result_t<G&>> && requires {
      {
        G::min()
      } -> same_as<invoke_result_t<G&>>;
      {
        G::max()
      } -> same_as<invoke_result_t<G&>>;
      requires bool_constant<(G::min() < G::max())>::value;
    };
}

类模板 std::linear_congruential_engine

namespace std {
  template<class UIntType, UIntType a, UIntType c, UIntType m>
  class linear_congruential_engine
  {
  public:
    // 类型定义
    using result_type = UIntType;
    // 引擎特性
    static constexpr result_type multiplier = a;
    static constexpr result_type increment  = c;
    static constexpr result_type modulus    = m;
    static constexpr result_type min() { return c == 0u ? 1u : 0u; }
    static constexpr result_type max() { return m - 1u; }
    static constexpr result_type default_seed = 1u;
    // 构造函数和种子设置函数
    linear_congruential_engine()
      : linear_congruential_engine(default_seed)
    {
    }
    explicit linear_congruential_engine(result_type s);
    template<class Sseq>
    explicit linear_congruential_engine(Sseq& q);
    void seed(result_type s = default_seed);
    template<class Sseq>
    void seed(Sseq& q);
    // 相等性运算符
    friend bool operator==(const linear_congruential_engine& x,
                           const linear_congruential_engine& y);
    // 生成函数
    result_type operator()();
    void discard(unsigned long long z);
    // 流插入器和提取器
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // 宿主
                 const linear_congruential_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // 宿主
                 linear_congruential_engine& x);
  };
}

类模板 std::mersenne_twister_engine

namespace std {
  template<class UIntType,
           size_t w,
           size_t n,
           size_t m,
           size_t r,
           UIntType a,
           size_t u,
           UIntType d,
           size_t s,
           UIntType b,
           size_t t,
           UIntType c,
           size_t l,
           UIntType f>
  class mersenne_twister_engine
  {
  public:
    // 类型定义
    using result_type = UIntType;
    // 引擎特性
    static constexpr size_t word_size                   = w;
    static constexpr size_t state_size                  = n;
    static constexpr size_t shift_size                  = m;
    static constexpr size_t mask_bits                   = r;
    static constexpr UIntType xor_mask                  = a;
    static constexpr size_t tempering_u                 = u;
    static constexpr UIntType tempering_d               = d;
    static constexpr size_t tempering_s                 = s;
    static constexpr UIntType tempering_b               = b;
    static constexpr size_t tempering_t                 = t;
    static constexpr UIntType tempering_c               = c;
    static constexpr size_t tempering_l                 = l;
    static constexpr UIntType initialization_multiplier = f;
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return /*2^w - 1*/; }
    static constexpr result_type default_seed = 5489u;
    // 构造函数与种子设置函数
    mersenne_twister_engine()
      : mersenne_twister_engine(default_seed)
    {
    }
    explicit mersenne_twister_engine(result_type value);
    template<class Sseq>
    explicit mersenne_twister_engine(Sseq& q);
    void seed(result_type value = default_seed);
    template<class Sseq>
    void seed(Sseq& q);
    // 相等性运算符
    friend bool operator==(const mersenne_twister_engine& x,
                           const mersenne_twister_engine& y);
    // 生成函数
    result_type operator()();
    void discard(unsigned long long z);
    // 流插入与提取操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // 托管
                 const mersenne_twister_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // 托管
                 mersenne_twister_engine& x);
  };
}

类模板 std::subtract_with_carry_engine

namespace std {
  template<class UIntType, size_t w, size_t s, size_t r>
  class subtract_with_carry_engine
  {
  public:
    // 类型定义
    using result_type = UIntType;
    // 引擎特性
    static constexpr size_t word_size = w;
    static constexpr size_t short_lag = s;
    static constexpr size_t long_lag  = r;
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return /*m - 1*/; }
    static constexpr uint_least32_t default_seed = 19780503u;
    // 构造函数与种子设置函数
    subtract_with_carry_engine()
      : subtract_with_carry_engine(0u)
    {
    }
    explicit subtract_with_carry_engine(result_type value);
    template<class Sseq>
    explicit subtract_with_carry_engine(Sseq& q);
    void seed(result_type value = 0u);
    template<class Sseq>
    void seed(Sseq& q);
    // 相等性运算符
    friend bool operator==(const subtract_with_carry_engine& x,
                           const subtract_with_carry_engine& y);
    // 生成函数
    result_type operator()();
    void discard(unsigned long long z);
    // 流插入与提取器
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // 宿主环境
                 const subtract_with_carry_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // 宿主环境
                 subtract_with_carry_engine& x);
  };
}

类模板 std::philox_engine

namespace std {
  template<class UIntType, size_t w, size_t n, size_t r, UIntType... consts>
  class philox_engine
  {
    static constexpr size_t /*array-size*/ = n / 2; // 仅用于说明
  public:
    // 类型定义
    using result_type = UIntType;
    // 引擎特性
    static constexpr size_t word_size   = w;
    static constexpr size_t word_count  = n;
    static constexpr size_t round_count = r;
    static constexpr array<result_type, /*array-size*/> multipliers;
    static constexpr array < result_type, @仅用于说明id { array - size > }
    @round_consts;
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return m - 1; }
    static constexpr result_type default_seed = 20111115u;
    // 构造函数与种子设置函数
    philox_engine()
      : philox_engine(default_seed)
    {
    }
    explicit philox_engine(result_type value);
    template<class Sseq>
    explicit philox_engine(Sseq& q);
    void seed(result_type value = default_seed);
    template<class Sseq>
    void seed(Sseq& q);
    void set_counter(const array<result_type, n>& counter);
    // 相等性运算符
    friend bool operator==(const philox_engine& x, const philox_engine& y);
    // 生成函数
    result_type operator()();
    void discard(unsigned long long z);
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // 托管
                 const philox_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // 托管
                 philox_engine& x);
  };
}

类模板 std::discard_block_engine

namespace std {
  template<class Engine, size_t p, size_t r>
  class discard_block_engine
  {
  public:
    // 类型定义
    using result_type = typename Engine::result_type;
    // 引擎特性
    static constexpr size_t block_size = p;
    static constexpr size_t used_block = r;
    static constexpr result_type min() { return Engine::min(); }
    static constexpr result_type max() { return Engine::max(); }
    // 构造函数与种子设置函数
    discard_block_engine();
    explicit discard_block_engine(const Engine& e);
    explicit discard_block_engine(Engine&& e);
    explicit discard_block_engine(result_type s);
    template<class Sseq>
    explicit discard_block_engine(Sseq& q);
    void seed();
    void seed(result_type s);
    template<class Sseq>
    void seed(Sseq& q);
    // 相等性运算符
    friend bool operator==(const discard_block_engine& x, const discard_block_engine& y);
    // 生成函数
    result_type operator()();
    void discard(unsigned long long z);
    // 属性函数
    const Engine& base() const noexcept { return e; }
    // 插入器与提取器
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // 托管
                 const discard_block_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // 托管
                 discard_block_engine& x);
  private:
    Engine e; // 仅用于说明
    size_t n; // 仅用于说明
  };
}

类模板 std::independent_bits_engine

namespace std {
  template<class Engine, size_t w, class UIntType>
  class independent_bits_engine
  {
  public:
    // 类型定义
    using result_type = UIntType;
    // 引擎特性
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return /*2^w - 1*/; }
    // 构造函数和种子设置函数
    independent_bits_engine();
    explicit independent_bits_engine(const Engine& e);
    explicit independent_bits_engine(Engine&& e);
    explicit independent_bits_engine(result_type s);
    template<class Sseq>
    explicit independent_bits_engine(Sseq& q);
    void seed();
    void seed(result_type s);
    template<class Sseq>
    void seed(Sseq& q);
    // 相等性运算符
    friend bool operator==(const independent_bits_engine& x,
                           const independent_bits_engine& y);
    // 生成函数
    result_type operator()();
    void discard(unsigned long long z);
    // 属性函数
    const Engine& base() const noexcept { return e; }
    // 插入器和提取器
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // 托管
                 const independent_bits_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // 托管
                 independent_bits_engine& x);
  private:
    Engine e; // 仅用于说明
  };
}

类模板 std::shuffle_order_engine

namespace std {
  template<class Engine, size_t k>
  class shuffle_order_engine
  {
  public:
    // 类型定义
    using result_type = typename Engine::result_type;
    // 引擎特性
    static constexpr size_t table_size = k;
    static constexpr result_type min() { return Engine::min(); }
    static constexpr result_type max() { return Engine::max(); }
    // 构造函数和种子设置函数
    shuffle_order_engine();
    explicit shuffle_order_engine(const Engine& e);
    explicit shuffle_order_engine(Engine&& e);
    explicit shuffle_order_engine(result_type s);
    template<class Sseq>
    explicit shuffle_order_engine(Sseq& q);
    void seed();
    void seed(result_type s);
    template<class Sseq>
    void seed(Sseq& q);
    // 相等性运算符
    friend bool operator==(const shuffle_order_engine& x, const shuffle_order_engine& y);
    // 生成函数
    result_type operator()();
    void discard(unsigned long long z);
    // 属性函数
    const Engine& base() const noexcept { return e; }
    // 插入器和提取器
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const shuffle_order_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    shuffle_order_engine& x);
  private:
    Engine e;         // 仅用于说明
    result_type V[k]; // 仅用于说明
    result_type Y;    // 仅用于说明
  };
}

预定义参数的引擎与引擎适配器

namespace std {
using minstd_rand0 = linear_congruential_engine<uint_fast32_t, 16'807, 0, 2'147'483'647>;
using minstd_rand = linear_congruential_engine<uint_fast32_t, 48'271, 0, 2'147'483'647>;
using mt19937 = mersenne_twister_engine<uint_fast32_t,
                                        32,
                                        624,
                                        397,
                                        31,
                                        0x9908'b0df,
                                        11,
                                        0xffff'ffff,
                                        7,
                                        0x9d2c'5680,
                                        15,
                                        0xefc6'0000,
                                        18,
                                        1'812'433'253>; //'
using mt19937_64 = mersenne_twister_engine<uint_fast64_t,
                                           64,
                                           312,
                                           156,
                                           31,
                                           0xb502'6f5a'a966'19e9,
                                           29,
                                           0x5555'5555'5555'5555,
                                           17,
                                           0x71d6'7fff'eda6'0000,
                                           37,
                                           0xfff7'eee0'0000'0000,
                                           43,
                                           6'364'136'223'846'793'005>;
using ranlux24_base = subtract_with_carry_engine<uint_fast32_t, 24, 10, 24>;
using ranlux48_base = subtract_with_carry_engine<uint_fast64_t, 48, 5, 12>;
using ranlux24 = discard_block_engine<ranlux24_base, 223, 23>;
using ranlux48 = discard_block_engine<ranlux48_base, 389, 11>;
using knuth_b = shuffle_order_engine<minstd_rand0, 256>;
using default_random_engine = /* 由实现定义 */;
using philox4x32 = philox_engine<uint_fast32_t,
                                 32,
                                 4,
                                 10,
                                 0xD2511F53,
                                 0x9E3779B9,
                                 0xCD9E8D57,
                                 0xBB67AE85>;
using philox4x64 = philox_engine<uint_fast64_t,
                                 64,
                                 4,
                                 10,
                                 0xD2E7470EE14C6C93,
                                 0x9E3779B97F4A7C15,
                                 0xCA5A826395121157,
                                 0xBB67AE8584CAA73B>;
}

std::random_device

namespace std {
  class random_device
  {
  public:
    // 类型定义
    using result_type = unsigned int;
    // 生成器特性
    static constexpr result_type min() { return numeric_limits<result_type>::min(); }
    static constexpr result_type max() { return numeric_limits<result_type>::max(); }
    // 构造函数
    random_device()
      : random_device(/* 实现定义 */)
    {
    }
    explicit random_device(const string& token);
    // 生成函数
    result_type operator()();
    // 属性函数
    double entropy() const noexcept;
    // 禁止拷贝函数
    random_device(const random_device&)  = delete;
    void operator=(const random_device&) = delete;
  };
}

std::seed_seq

namespace std {
  class seed_seq
  {
  public:
    // 类型定义
    using result_type = uint_least32_t;
    // 构造函数
    seed_seq() noexcept;
    template<class T>
    seed_seq(initializer_list<T> il);
    template<class InputIter>
    seed_seq(InputIter begin, InputIter end);
    // 生成函数
    template<class RandomAccessIter>
    void generate(RandomAccessIter begin, RandomAccessIter end);
    // 属性函数
    size_t size() const noexcept;
    template<class OutputIter>
    void param(OutputIter dest) const;
    // 禁止复制函数
    seed_seq(const seed_seq&)       = delete;
    void operator=(const seed_seq&) = delete;
  private:
    vector<result_type> v; // 仅用于说明
  };
}

类模板 std::uniform_int_distribution

namespace std {
  template<class IntType = int>
  class uniform_int_distribution
  {
  public:
    // 类型定义
    using result_type = IntType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    uniform_int_distribution()
      : uniform_int_distribution(0)
    {
    }
    explicit uniform_int_distribution(IntType a,
                                      IntType b = numeric_limits<IntType>::max());
    explicit uniform_int_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const uniform_int_distribution& x,
                           const uniform_int_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    result_type a() const;
    result_type b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // 宿主
                 const uniform_int_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // 宿主
                 uniform_int_distribution& x);
  };
}

类模板 std::uniform_real_distribution

namespace std {
  template<class RealType = double>
  class uniform_real_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定类型 */;
    // 构造函数和重置函数
    uniform_real_distribution()
      : uniform_real_distribution(0.0)
    {
    }
    explicit uniform_real_distribution(RealType a, RealType b = 1.0);
    explicit uniform_real_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const uniform_real_distribution& x,
                           const uniform_real_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    result_type a() const;
    result_type b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const uniform_real_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    uniform_real_distribution& x);
  };
}

std::bernoulli_distribution

namespace std {
  class bernoulli_distribution
  {
  public:
    // 类型定义
    using result_type = bool;
    using param_type  = /* 未指定 */;
    // 构造函数与重置函数
    bernoulli_distribution()
      : bernoulli_distribution(0.5)
    {
    }
    explicit bernoulli_distribution(double p);
    explicit bernoulli_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const bernoulli_distribution& x,
                           const bernoulli_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const bernoulli_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    bernoulli_distribution& x);
  };
}

类模板 std::binomial_distribution

namespace std {
  template<class IntType = int>
  class binomial_distribution
  {
  public:
    // 类型定义
    using result_type = IntType;
    using param_type  = /* 未指定 */;
    // 构造函数与重置函数
    binomial_distribution()
      : binomial_distribution(1)
    {
    }
    explicit binomial_distribution(IntType t, double p = 0.5);
    explicit binomial_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const binomial_distribution& x,
                           const binomial_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    IntType t() const;
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const binomial_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    binomial_distribution& x);
  };
}

类模板 std::geometric_distribution

namespace std {
  template<class IntType = int>
  class geometric_distribution
  {
  public:
    // 类型定义
    using result_type = IntType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    geometric_distribution()
      : geometric_distribution(0.5)
    {
    }
    explicit geometric_distribution(double p);
    explicit geometric_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const geometric_distribution& x,
                           const geometric_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const geometric_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    geometric_distribution& x);
  };
}

类模板 std::negative_binomial_distribution

namespace std {
  template<class IntType = int>
  class negative_binomial_distribution
  {
  public:
    // 类型定义
    using result_type = IntType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    negative_binomial_distribution()
      : negative_binomial_distribution(1)
    {
    }
    explicit negative_binomial_distribution(IntType k, double p = 0.5);
    explicit negative_binomial_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const negative_binomial_distribution& x,
                           const negative_binomial_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    IntType k() const;
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const negative_binomial_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    negative_binomial_distribution& x);
  };
}

类模板 std::poisson_distribution

namespace std {
  template<class IntType = int>
  class poisson_distribution
  {
  public:
    // 类型定义
    using result_type = IntType;
    using param_type  = /* 未指定类型 */;
    // 构造函数和重置函数
    poisson_distribution()
      : poisson_distribution(1.0)
    {
    }
    explicit poisson_distribution(double mean);
    explicit poisson_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const poisson_distribution& x, const poisson_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    double mean() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const poisson_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    poisson_distribution& x);
  };
}

类模板 std::exponential_distribution

namespace std {
  template<class RealType = double>
  class exponential_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    exponential_distribution()
      : exponential_distribution(1.0)
    {
    }
    explicit exponential_distribution(RealType lambda);
    explicit exponential_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const exponential_distribution& x,
                           const exponential_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType lambda() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const exponential_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    exponential_distribution& x);
  };
}

类模板 std::gamma_distribution

namespace std {
  template<class RealType = double>
  class gamma_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    gamma_distribution()
      : gamma_distribution(1.0)
    {
    }
    explicit gamma_distribution(RealType alpha, RealType beta = 1.0);
    explicit gamma_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const gamma_distribution& x, const gamma_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType alpha() const;
    RealType beta() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const gamma_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    gamma_distribution& x);
  };
}

类模板 std::weibull_distribution

namespace std {
  template<class RealType = double>
  class weibull_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    weibull_distribution()
      : weibull_distribution(1.0)
    {
    }
    explicit weibull_distribution(RealType a, RealType b = 1.0);
    explicit weibull_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const weibull_distribution& x, const weibull_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType a() const;
    RealType b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const weibull_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    weibull_distribution& x);
  };
}

类模板 std::extreme_value_distribution

namespace std {
  template<class RealType = double>
  class extreme_value_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    extreme_value_distribution()
      : extreme_value_distribution(0.0)
    {
    }
    explicit extreme_value_distribution(RealType a, RealType b = 1.0);
    explicit extreme_value_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const extreme_value_distribution& x,
                           const extreme_value_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType a() const;
    RealType b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const extreme_value_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    extreme_value_distribution& x);
  };
}

类模板 std::normal_distribution

namespace std {
  template<class RealType = double>
  class normal_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    normal_distribution()
      : normal_distribution(0.0)
    {
    }
    explicit normal_distribution(RealType mean, RealType stddev = 1.0);
    explicit normal_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const normal_distribution& x, const normal_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType mean() const;
    RealType stddev() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 插入器和提取器
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const normal_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    normal_distribution& x);
  };
}

类模板 std::lognormal_distribution

namespace std {
  template<class RealType = double>
  class lognormal_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    lognormal_distribution()
      : lognormal_distribution(0.0)
    {
    }
    explicit lognormal_distribution(RealType m, RealType s = 1.0);
    explicit lognormal_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const lognormal_distribution& x,
                           const lognormal_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType m() const;
    RealType s() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const lognormal_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    lognormal_distribution& x);
  };
}

类模板 std::chi_squared_distribution

namespace std {
  template<class RealType = double>
  class chi_squared_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    chi_squared_distribution()
      : chi_squared_distribution(1.0)
    {
    }
    explicit chi_squared_distribution(RealType n);
    explicit chi_squared_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const chi_squared_distribution& x,
                           const chi_squared_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType n() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 插入器和提取器
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const chi_squared_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    chi_squared_distribution& x);
  };
}

类模板 std::cauchy_distribution

namespace std {
  template<class RealType = double>
  class cauchy_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    cauchy_distribution()
      : cauchy_distribution(0.0)
    {
    }
    explicit cauchy_distribution(RealType a, RealType b = 1.0);
    explicit cauchy_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const cauchy_distribution& x, const cauchy_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType a() const;
    RealType b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const cauchy_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    cauchy_distribution& x);
  };
}

类模板 std::fisher_f_distribution

namespace std {
  template<class RealType = double>
  class fisher_f_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定类型 */;
    // 构造函数与重置函数
    fisher_f_distribution()
      : fisher_f_distribution(1.0)
    {
    }
    explicit fisher_f_distribution(RealType m, RealType n = 1.0);
    explicit fisher_f_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const fisher_f_distribution& x,
                           const fisher_f_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType m() const;
    RealType n() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const fisher_f_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    fisher_f_distribution& x);
  };
}

类模板 std::student_t_distribution

namespace std {
  template<class RealType = double>
  class student_t_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    student_t_distribution()
      : student_t_distribution(1.0)
    {
    }
    explicit student_t_distribution(RealType n);
    explicit student_t_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const student_t_distribution& x,
                           const student_t_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    RealType n() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const student_t_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    student_t_distribution& x);
  };
}

类模板 std::discrete_distribution

namespace std {
  template<class IntType = int>
  class discrete_distribution
  {
  public:
    // 类型定义
    using result_type = IntType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    discrete_distribution();
    template<class InputIter>
    discrete_distribution(InputIter firstW, InputIter lastW);
    discrete_distribution(initializer_list<double> wl);
    template<class UnaryOperation>
    discrete_distribution(size_t nw, double xmin, double xmax, UnaryOperation fw);
    explicit discrete_distribution(const param_type& parm);
    void reset();
    // 相等性运算符
    friend bool operator==(const discrete_distribution& x,
                           const discrete_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    vector<double> probabilities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const discrete_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    discrete_distribution& x);
  };
}

类模板 std::piecewise_constant_distribution

namespace std {
  template<class RealType = double>
  class piecewise_constant_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数和重置函数
    piecewise_constant_distribution();
    template<class InputIterB, class InputIterW>
    piecewise_constant_distribution(InputIterB firstB,
                                    InputIterB lastB,
                                    InputIterW firstW);
    template<class UnaryOperation>
    piecewise_constant_distribution(initializer_list<RealType> bl, UnaryOperation fw);
    template<class UnaryOperation>
    piecewise_constant_distribution(size_t nw,
                                    RealType xmin,
                                    RealType xmax,
                                    UnaryOperation fw);
    explicit piecewise_constant_distribution(const param_type& parm);
    void reset();
    // 相等性运算符
    friend bool operator==(const piecewise_constant_distribution& x,
                           const piecewise_constant_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    vector<result_type> intervals() const;
    vector<result_type> densities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const piecewise_constant_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    piecewise_constant_distribution& x);
  };
}

类模板 std::piecewise_linear_distribution

namespace std {
  template<class RealType = double>
  class piecewise_linear_distribution
  {
  public:
    // 类型定义
    using result_type = RealType;
    using param_type  = /* 未指定 */;
    // 构造函数与重置函数
    piecewise_linear_distribution();
    template<class InputIterB, class InputIterW>
    piecewise_linear_distribution(InputIterB firstB, InputIterB lastB, InputIterW firstW);
    template<class UnaryOperation>
    piecewise_linear_distribution(initializer_list<RealType> bl, UnaryOperation fw);
    template<class UnaryOperation>
    piecewise_linear_distribution(size_t nw,
                                  RealType xmin,
                                  RealType xmax,
                                  UnaryOperation fw);
    explicit piecewise_linear_distribution(const param_type& parm);
    void reset();
    // 相等运算符
    friend bool operator==(const piecewise_linear_distribution& x,
                           const piecewise_linear_distribution& y);
    // 生成函数
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // 属性函数
    vector<result_type> intervals() const;
    vector<result_type> densities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // 流操作符
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const piecewise_linear_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    piecewise_linear_distribution& x);
  };
}