Maison >développement back-end >C++ >Comment puis-je mélanger des vecteurs de manière efficace et réutilisable en C ?

Comment puis-je mélanger des vecteurs de manière efficace et réutilisable en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 07:35:09491parcourir

How Can I Efficiently and Reusably Shuffle Vectors in C  ?

Réarrangement de vecteurs efficace et réutilisable en C

Le brassage d'un vecteur est une opération courante dans diverses tâches de programmation. Bien qu'il existe plusieurs façons d'y parvenir, il est crucial d'opter pour une approche générique et efficace qui peut être réutilisée pour différents scénarios.

Dans l'extrait de code fourni, l'approche actuelle consiste à créer un tableau intermédiaire et à connaître le type d’élément, ce qui peut conduire à des inefficacités. Une solution plus efficace et réutilisable est fournie en utilisant C 11 et les versions ultérieures.

Utilisation de C 11 et versions ultérieures

#include <algorithm>
#include <random>

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

Ce code utilise la fonction std::shuffle , qui nécessite un moteur aléatoire comme troisième argument. Le std::default_random_engine est utilisé pour générer des nombres aléatoires. En utilisant cette fonction, nous pouvons mélanger les éléments en place sans créer de tableaux intermédiaires ni connaître les types d'éléments.

En utilisant C 98

Pour C 98, nous pouvons utiliser le Fonction std::random_shuffle :

#include <algorithm>

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

Semer le hasard Moteur

Pour générer des permutations différentes à chaque fois, nous pouvons amorcer le moteur aléatoire en utilisant std::random_device:

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

Cette approche garantit que différentes séquences de mélanges sont générées à chaque fois. heure à laquelle le programme est exécuté.

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