std::experimental:: sample
|
Definiert im Header
<experimental/algorithm>
|
||
|
template
<
class
PopulationIterator,
class
SampleIterator,
class
Distance,
class
URBG
>
|
(1) | (Library Fundamentals TS) |
|
template
<
class
PopulationIterator,
class
SampleIterator,
class
Distance
>
SampleIterator sample
(
PopulationIterator first, PopulationIterator last,
|
(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.
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.
|
||
-
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) |