28 Algorithms library [algorithms]

28.6 Mutating sequence operations [alg.modifying.operations]

28.6.12 Sample [alg.random.sample]

template<class PopulationIterator, class SampleIterator, class Distance, class UniformRandomBitGenerator> SampleIterator sample(PopulationIterator first, PopulationIterator last, SampleIterator out, Distance n, UniformRandomBitGenerator&& g);

Requires:

  • PopulationIterator должны удовлетворять требованиям input iterator.

  • SampleIterator должны удовлетворять требованиям output iterator.

  • SampleIterator должен удовлетворять дополнительным требованиям а, random access iterator если не PopulationIterator удовлетворяет дополнительным требованиям а forward iterator.

  • PopulationIteratorТип значения должен быть writable to out.

  • Distance должен быть целочисленным типом.

  • remove_­reference_­t<UniformRandomBitGenerator> должен соответствовать требованиям uniform random bit generator типа, возвращаемый тип которого может быть преобразован в Distance.

  • out не должно быть в диапазоне [first, last).

Effects: Копирует min(last - first, n) элементы (the sample) из [first, last) (the population) в так out , чтобы каждый возможный образец имел равную вероятность появления. [ Note: Алгоритмы, обеспечивающие такие эффекты, включают selection sampling и reservoir sampling. ]end note

Returns: Конец результирующего диапазона выборки.

Complexity: O(last - first).

Remarks:

  • Стабильно тогда и только тогда, когда PopulationIterator удовлетворяет требованиям прямого итератора.

  • В той степени, в которой реализация этой функции использует случайные числа, объект g должен служить источником случайности реализации.