Maison >développement back-end >C++ >Comment puis-je mélanger efficacement un std::vector en C ?

Comment puis-je mélanger efficacement un std::vector en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-30 19:23:14313parcourir

How Can I Efficiently Shuffle a std::vector in C  ?

Mélange efficace d'un std::vecteur

Lors du mélange d'un std::vecteur, l'efficacité joue un rôle crucial. La méthode fournie utilisant un tableau intermédiaire et des connaissances spécifiques au type n'est pas optimale.

Approche C moderne

En C 11 et versions ultérieures, une approche plus efficace est disponible :

#include <algorithm>
#include <random>

auto rng = std::default_random_engine {};
std::shuffle(std::begin(cards_), std::end(cards_), rng);

Cette méthode utilise la fonction std::shuffle, qui randomise efficacement les éléments. N'oubliez pas de réutiliser l'instance rng sur plusieurs appels std::shuffle pour une randomisation cohérente.

Shuffling personnalisé

Si vous désirez des séquences aléatoires distinctes à travers les exécutions du programme, amorcez l'instance aléatoire moteur avec la sortie de std::random_device:

auto rd = std::random_device {};
auto rng = std::default_random_engine { rd() };
std::shuffle(std::begin(cards_), std::end(cards_), rng);

C 98 Approche

Pour C 98, la fonction std::random_shuffle reste applicable :

#include <algorithm>

std::random_shuffle(cards_.begin(), cards_.end());

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn