命名空间
变体
操作

std::experimental::sample

来自 cppreference.cn
 
 
实验性
技术规范
文件系统库 (filesystem TS)
库基础 (library fundamentals TS)
库基础 2 (library fundamentals TS v2)
库基础 3 (library fundamentals TS v3)
并行扩展 (parallelism TS)
并行扩展 2 (parallelism TS v2)
并发扩展 (concurrency TS)
并发扩展 2 (concurrency TS v2)
概念 (concepts TS)
范围 (ranges TS)
反射 (reflection TS)
数学特殊函数 (special functions TR)
实验性非 TS
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
定义于头文件 <experimental/algorithm>
template< class PopulationIterator, class SampleIterator,

          class Distance, class URBG >
SampleIterator sample( PopulationIterator first, PopulationIterator last,
                       SampleIterator out, Distance n,

                       URBG&& g );
(1) (库基础 TS)
template< class PopulationIterator, class SampleIterator, class Distance >

SampleIterator sample( PopulationIterator first, PopulationIterator last,

                       SampleIterator out, Distance n );
(2) (库基础 TS v2)

从序列 [firstlast) 中选择 n 个元素,使得每个可能的样本具有相等的出现概率,并将这些选定的元素写入输出迭代器 out

如果 n 大于序列中的元素数量,则选择 last - first 个元素。

仅当 PopulationIterator 满足 LegacyForwardIterator 的要求时,该算法才是稳定的。

1) 随机数使用随机数生成器 g 生成。
2) 随机数使用每线程引擎生成。

目录

[编辑] 参数

first, last - 形成进行采样的范围(总体)的迭代器对
out - 样本写入到的输出迭代器。不得在范围 [firstlast)
n - 要采样的样本数
g - 用作随机性来源的随机数生成器
-
PopulationIterator 必须满足 LegacyInputIterator 的要求。
-
SampleIterator 必须满足 LegacyOutputIterator 的要求。
-
如果 PopulationIterator 不满足 LegacyForwardIterator,则 SampleIterator 也必须满足 LegacyRandomAccessIterator 的要求。
-
PopulationIterator 的值类型必须可写入到 out
-
Distance 必须是整数类型。
-
URBG 必须满足 UniformRandomBitGenerator 的要求,并且其返回类型必须可转换为 Distance

[编辑] 返回值

返回输出最后一个样本后的 out 的副本,即样本范围的末尾。

[编辑] 复杂度

std::distance(first, last) 中呈线性。

[编辑] 注释

此函数可能实现选择抽样或水塘抽样。

[编辑] 示例

#include <experimental/algorithm>
#include <iostream>
#include <iterator>
#include <random>
#include <string>
 
int main()
{
    std::string in = "abcdefgh", out;
    std::experimental::sample(in.begin(), in.end(), std::back_inserter(out),
                              5, std::mt19937{std::random_device{}()});
    std::cout << "five random letters out of " << in << " : " << out << '\n';
}

可能的输出

five random letters out of abcdefgh : cdefg

[编辑] 参见

(C++17 前)(C++11 起)
随机重排范围内的元素
(函数模板) [编辑]