std::ranges:: generate_random
|
Definiert in Header
<random>
|
||
|
Aufrufsignatur
|
||
|
template
<
class
R,
class
G
>
erfordert
ranges::
output_range
<
R,
std::
invoke_result_t
<
G
&
>>
&&
|
(1) | (seit C++26) |
|
template
<
class
G,
std::
output_iterator
<
std::
invoke_result_t
<
G
&
>>
O,
std::
sentinel_for
<
O
>
S
>
|
(2) | (seit C++26) |
|
template
<
class
R,
class
G,
class
D
>
erfordert
ranges::
output_range
<
R,
std::
invoke_result_t
<
D
&
, G
&
>>
&&
|
(3) | (seit C++26) |
|
template
<
class
G,
class
D,
std::
output_iterator
<
std::
invoke_result_t
<
D
&
, G
&
>>
O,
std::
sentinel_for
<
O
>
S
>
|
(4) | (seit C++26) |
Versucht, Zufallszahlen mit der
generate_random
Memberfunktion des Zufallszahlengenerators oder der Verteilung zu erzeugen, was voraussichtlich effizienter ist. Greift auf elementweise Erzeugung zurück, falls keine
generate_random
Memberfunktion verfügbar ist.
Lassen Sie den Fallback-Vorgang den Aufruf von ranges:: generate ( std:: forward < R > ( r ) , std:: ref ( g ) ) oder ranges:: generate ( std:: forward < R > ( r ) , [ & d, & g ] { return std:: invoke ( d, g ) ; } ) für (1) oder (3) sein.
R
das Konzept
sized_range
modelliert, füllt
r
mit
ranges::
size
(
r
)
Werten vom Typ
I
durch Ausführung einer nicht näher spezifizierten Anzahl von Aufrufen der Form
g
(
)
oder
g.
generate_random
(
s
)
, falls ein solcher Ausdruck wohlgeformt ist für einen Wert
N
und ein Objekt
s
vom Typ
std::
span
<
I, N
>
.
R
das Konzept
sized_range
modelliert, füllt
r
mit
ranges::
size
(
r
)
Werten des Typs
I
durch Ausführung einer nicht näher spezifizierten Anzahl von Aufrufen der Form
std::
invoke
(
d, g
)
oder
d.
generate_random
(
s, g
)
, falls ein solcher Ausdruck für einen Wert
N
und ein Objekt
s
vom Typ
std::
span
<
I, N
>
wohlgeformt ist.
Wenn die Auswirkungen von (1) oder (3) nicht denen des entsprechenden Fallback-Vorgangs entsprechen, ist das Verhalten undefiniert.
Der Wert von
N
kann zwischen verschiedenen Aufrufen variieren. Implementierungen können für kürzere Bereiche kleinere Werte wählen.
Die auf dieser Seite beschriebenen funktionsähnlichen Entitäten sind Algorithm Function Objects (informell bekannt als Niebloids ), das heißt:
- Explizite Template-Argumentlisten können beim Aufruf keiner von ihnen angegeben werden.
- Keiner von ihnen ist sichtbar für argument-dependent lookup .
- Wenn einer von ihnen durch normal unqualified lookup als Name links vom Funktionsaufrufoperator gefunden wird, wird argument-dependent lookup unterdrückt.
Inhaltsverzeichnis |
Parameter
| first, last | - | das Iterator-Sentinel-Paar, das den Bereich definiert, in den Zufallszahlen geschrieben werden |
| r | - |
der
range
, in den Zufallszahlen geschrieben werden
|
| g | - | gleichförmiger Zufallsbitgenerator |
| d | - | Zufallszahlenverteilungsobjekt |
Hinweise
Zum Zeitpunkt der Standardisierung von
std::ranges::generate_random
gibt es in der Standardbibliothek keinen Zufallszahlengenerator oder keine Verteilung, die eine
generate_random
-Memberfunktion bereitstellt.
std::ranges::generate_random
kann effizienter sein, wenn es mit einem benutzerdefinierten Zufallszahlengenerator verwendet wird, der eine zugrunde liegende vektorisierte API umschließt.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_generate_random
|
202403L
|
(C++26) |
std::ranges::generate_random
|
Beispiel
#include <algorithm> #include <iomanip> #include <iostream> #include <random> int main() { std::default_random_engine eng; std::default_random_engine::result_type rs[16]{}; std::ranges::generate_random(rs, eng); std::cout << std::left; for (int i{}; auto n : rs) std::cout << std::setw(11) << n << (++i % 4 ? ' ' : '\n'); }
Mögliche Ausgabe:
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709 823564440 1115438165 1784484492 74243042 114807987 1137522503
Siehe auch
|
(C++20)
|
Speichert das Ergebnis einer Funktion in einem Bereich
(Algorithmus-Funktionsobjekt) |
|
(C++20)
|
Spezifiziert, dass ein Typ als einheitlicher Zufallsbitgenerator qualifiziert
(Konzept) |