std::sample
STD:样本
Defined in header | | |
---|---|---|
template< class PopulationIterator, class SampleIterator, class Distance, class UniformRandomBitGenerator > SampleIterator sample( PopulationIterator first, PopulationIterator last, SampleIterator out, Distance n, UniformRandomBitGenerator&& g | | (since C++17) |
选n
序列中的元素。[首先,最后%29,这样每个可能的样本都有相同的出现概率,并将这些选定的元素写入输出迭代器。out
使用随机数生成器生成随机数。g
...
如果n
大于序列中的元素数,则选择last-first
元素。
该算法只有在以下情况下才是稳定的PopulationIterator
满足…的要求ForwardIterator
...
参数
first, last | - | pair of iterators forming the range from which to make the sampling (the population) |
---|---|---|
out | - | the output iterator where the samples are written. Must not be in the [first;last) range |
n | - | number of samples to make |
g | - | the random number generator used as the source of randomness |
-用户必须符合输入器的要求。
-取样器必须符合输出器的要求。
-如果迭代器%27T满足前驱器,采样器也必须满足RandomAccessIterator的要求。
-PopulationIterator%27s值类型必须是可写的
-距离必须是整数类型
-性病::清除[医]参照系[医]T型<UniformRandomBitGenerator>必须满足UniformRandomBitGenerator的要求,其返回类型必须转换为距离
返回值
返回out
在输出的最后一个示例之后,即样本范围的结束。
复杂性
线性在std::distance
(first,last)
...
注记
该功能可以实现选择采样或储层采样。
例
二次
#include <iostream>
#include <random>
#include <string>
#include <iterator>
#include <algorithm>
int main()
{
std::string in = "abcdefgh", out;
std::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
二次
另见
random_shuffleshuffle (until C++17)(C++11) | randomly re-orders elements in a range (function template) |
---|
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。