Namespaces
Variants

std::experimental:: sample

From cppreference.net
Definiert im Header <experimental/algorithm>
template < class PopulationIterator, class SampleIterator,

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

URBG && g ) ;
(1) (Library Fundamentals TS)
template < class PopulationIterator, class SampleIterator, class Distance >

SampleIterator sample ( PopulationIterator first, PopulationIterator last,

SampleIterator out, Distance n ) ;
(2) (Library Fundamentals TS v2)

Wählt n Elemente aus der Sequenz [ first , last ) so aus, dass jede mögliche Stichprobe die gleiche Erscheinungswahrscheinlichkeit hat, und schreibt die ausgewählten Elemente in den Ausgabeiterator out .

Wenn n größer ist als die Anzahl der Elemente in der Sequenz, werden last - first Elemente ausgewählt.

Der Algorithmus ist nur dann stabil, wenn PopulationIterator die Anforderungen eines LegacyForwardIterator erfüllt.

1) Zufallszahlen werden mit dem Zufallszahlengenerator g erzeugt.
2) Zufallszahlen werden unter Verwendung der per-thread engine erzeugt.

Inhaltsverzeichnis

Parameter

first, last - Iteratorpaar, das den Bereich definiert, aus dem die Stichprobe entnommen wird (die Grundgesamtheit)
out - Der Ausgabeiterator, in den die Stichproben geschrieben werden. Darf nicht im Bereich [ first , last ) liegen
n - Anzahl der zu entnehmenden Stichproben
g - Der Zufallszahlengenerator, der als Quelle für Zufälligkeit dient
-
PopulationIterator muss die Anforderungen eines LegacyInputIterator erfüllen.
-
SampleIterator muss die Anforderungen eines LegacyOutputIterator erfüllen.
-
SampleIterator muss außerdem die Anforderungen eines LegacyRandomAccessIterator erfüllen, falls PopulationIterator nicht die Anforderungen eines LegacyForwardIterator erfüllt.
-
Der Werttyp von PopulationIterator muss in out schreibbar sein.
-
Distance muss ein Ganzzahltyp sein.
-
URBG muss die Anforderungen eines UniformRandomBitGenerator erfüllen und sein Rückgabetyp muss in Distance konvertierbar sein.

Rückgabewert

Gibt eine Kopie von out nach der letzten ausgegebenen Probe zurück, also das Ende des Probenbereichs.

Komplexität

Linear in std:: distance ( first, last ) .

Hinweise

Diese Funktion kann Auswahl-Stichproben oder Reservoir-Stichproben implementieren.

Beispiel

#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';
}

Mögliche Ausgabe:

five random letters out of abcdefgh : cdefg

Siehe auch

(bis C++17) (C++11)
ordnet Elemente in einem Bereich zufällig neu an
(Funktions-Template)