std::ranges:: generate_random
|
Défini dans l'en-tête
<random>
|
||
|
Signature d'appel
|
||
|
template
<
class
R,
class
G
>
requires
ranges::
output_range
<
R,
std::
invoke_result_t
<
G
&
>>
&&
|
(1) | (depuis C++26) |
|
template
<
class
G,
std::
output_iterator
<
std::
invoke_result_t
<
G
&
>>
O,
std::
sentinel_for
<
O
>
S
>
|
(2) | (depuis C++26) |
|
template
<
class
R,
class
G,
class
D
>
requires
ranges::
output_range
<
R,
std::
invoke_result_t
<
D
&
, G
&
>>
&&
|
(3) | (depuis C++26) |
|
template
<
class
G,
class
D,
std::
output_iterator
<
std::
invoke_result_t
<
D
&
, G
&
>>
O,
std::
sentinel_for
<
O
>
S
>
|
(4) | (depuis C++26) |
Tente de générer des nombres aléatoires avec la
generate_random
fonction membre du générateur de nombres aléatoires ou de la distribution, ce qui est censé être plus efficace. Retourne à la génération élément par élément si aucune
generate_random
fonction membre n'est disponible.
Soit l'opération de repli l'appel de ranges:: generate ( std:: forward < R > ( r ) , std:: ref ( g ) ) ou ranges:: generate ( std:: forward < R > ( r ) , [ & d, & g ] { return std:: invoke ( d, g ) ; } ) pour (1) ou (3) respectivement.
R
modélise
sized_range
, remplit
r
avec
ranges::
size
(
r
)
valeurs de type
I
en effectuant un nombre non spécifié d'invocations de la forme
g
(
)
ou
g.
generate_random
(
s
)
, si une telle expression est bien formée pour une valeur
N
et un objet
s
de type
std::
span
<
I, N
>
.
R
modélise
sized_range
, remplit
r
avec
ranges::
size
(
r
)
valeurs de type
I
en effectuant un nombre non spécifié d'invocations de la forme
std::
invoke
(
d, g
)
ou
d.
generate_random
(
s, g
)
, si une telle expression est bien formée pour une valeur
N
et un objet
s
de type
std::
span
<
I, N
>
.
Si les effets de (1) ou (3) ne sont pas équivalents à ceux de l'opération de repli correspondante, le comportement est indéfini.
La valeur de
N
peut varier entre les invocations. Les implémentations peuvent choisir des valeurs plus petites pour des plages plus courtes.
Les entités de type fonction décrites sur cette page sont des objets fonction d'algorithmes (informellement appelés niebloids ), c'est-à-dire :
- Les listes d'arguments de modèle explicites ne peuvent pas être spécifiées lors de l'appel de l'une d'entre elles.
- Aucune d'entre elles n'est visible pour la recherche dépendante des arguments .
- Lorsque l'une d'entre elles est trouvée par la recherche non qualifiée normale comme nom à gauche de l'opérateur d'appel de fonction, la recherche dépendante des arguments est inhibée.
Table des matières |
Paramètres
| first, last | - | la paire itérateur-sentinelle définissant la plage d'éléments à laquelle les nombres aléatoires sont écrits |
| r | - |
la
range
à laquelle les nombres aléatoires sont écrits
|
| g | - | générateur uniforme de bits aléatoires |
| d | - | objet de distribution de nombres aléatoires |
Notes
Au moment de la standardisation de
std::ranges::generate_random
, il n'existe aucun générateur de nombres aléatoires ou distribution dans la bibliothèque standard qui fournisse une fonction membre
generate_random
.
std::ranges::generate_random
peut être plus efficace lorsqu'il est utilisé avec un générateur de nombres aléatoires défini par l'utilisateur qui encapsule une API vectorisée sous-jacente.
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_ranges_generate_random
|
202403L
|
(C++26) |
std::ranges::generate_random
|
Exemple
#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'); }
Sortie possible :
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709 823564440 1115438165 1784484492 74243042 114807987 1137522503
Voir aussi
|
(C++20)
|
enregistre le résultat d'une fonction dans une plage
(objet fonction algorithme) |
|
(C++20)
|
spécifie qu'un type est qualifié comme générateur uniforme de bits aléatoires
(concept) |