Manipulation de données - Recherche et remplacement

Manipulation de données - Réorganisation : rotation et permutati

Manipulation de données - Inversion et symétrisation

Réorganisation : rotation et permutation

La bibliothèque standard fournit plusieurs algorithmes permettant de réorganiser la séquence des éléments dans un conteneur qui ne prend pas en charge lui-même l’ordre de ses éléments. Ces algorithmes permettent de réaliser des rotations et des permutations des éléments, des symétries et des inversions, ainsi que des mélanges aléatoires.

Les algorithmes de rotation permettent de faire tourner les différents éléments d’une séquence dans un sens ou dans l’autre. Les algorithmes de rotation prennent en argument un itérateur qui indique le premier élément de la séquence devant subir la rotation, un itérateur référençant l’élément qui se trouvera en première position après la rotation, et un itérateur référençant l’élément suivant le dernier élément de la séquence.

Ainsi, pour effectuer une rotation d’une position vers la gauche, il suffit d’utiliser pour l’itérateur pivot la valeur de l’itérateur suivant l’itérateur premier et, pour effectuer une rotation d’une position vers la droite, il faut prendre pour l’itérateur pivot la valeur précédant celle de l’itérateur dernier.

rotate et rotate_copy

Voici la déclaration dans la STL :

template <class ForwardIterator> 
void rotate(ForwardIterator premier, ForwardIterator pivot, 
    ForwardIterator dernier); 

template <class ForwardIterator, class OutputIterator> 
void rotate_copy(ForwardIterator premier, ForwardIterator pivot, 
    ForwardIterator dernier, OutputIterator destination);

Code 9.5 : algorithme de rotation

#include <iostream> 
#include <algorithm> 

using namespace std; 

int main() 
{ 
   int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
   cout << "Voici le tableau initial: \n"; 
   for (int i=0; i<10; i++) 
      cout << tab[i] << " "; 
   cout << endl; 

   //On effectue une rotation pour amener le quatrième 
   // élément en première position : 
   rotate(tab, tab+3, tab+10); 
   cout << "Voici le tableau après rotation: \n"; 
   for (int i=0; i<10; i++) 
      cout << tab[i] << " "; 
   cout << endl; 
}


La bibliothèque fournit également des algorithmes permettant d’obtenir l’ensemble des permutations d’une séquence d’éléments. Rappelons qu’une permutation est une des combinaisons possibles des valeurs des différents éléments d’un ensemble, en considérant les éléments d’égale valeur comme identiques.

Par exemple, si un ensemble contient deux éléments de même valeur, il n’y a qu’une seule combinaison possible : les deux valeurs. En revanche, si ces deux éléments ont deux valeurs distinctes, on peut réaliser deux combinaisons selon la valeur que l’on place en premier.

next_permutation et prev_permutation

Ces algorithmes prennent tous les deux des itérateurs indiquant les éléments devant subir la permutation et renvoient un booléen indiquant si la permutation suivante ou précédente existe ou non. Si ces permutations n’existent pas, les algorithmes next_permutation et prev_permutation bouclent et calculent respectivement la plus petite et la plus grande permutation de l’ensemble des permutations.

Voici la déclaration dans la STL :

template <class BidirectionalIterator> 
bool next_permutation(BidirectionalIterator premier, BidirectionalIterator dernier); 

template <class BidirectionalIterator> 
bool prev_permutation(BidirectionalIterator premier, BidirectionalIterator dernier);

Code 9.6 : algorithme de permutation

#include <iostream> 
#include <algorithm> 

using namespace std; 

int main() 
{ 
   int tab[3] = {1, 1, 2}; 
   //On affiche l’ensemble des permutations de (1, 1, 2) : 
   do 
   { 
      int i; 
      for (i=0; i<3; i++) 
         cout << tab[i] << " "; 
      cout << endl; 
   } 
   while (next_permutation(tab, tab+3)); 
}


Le texte original de cette fiche pratique est extrait de
«Tout sur le C++» (Christine EBERHARDT, Collection
CommentCaMarche.net, Dunod, 2009)

Dernière modification le vendredi 30 octobre 2009 à 12:09:45.Ce document intitulé « Manipulation de données - Réorganisation : rotation et permutati » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Meilleures réponses pour « Manipulation de données Réorganisation : rotation et permutati » dans :
Manipulation de données - Réorganisation aléatoire Voir Réorganisation aléatoire L’algorithme random_shuffle est conçu pour redistribuer aléatoirement les éléments d’une séquence. Cet algorithme est fourni sous la forme de deux surcharges déclarées comme suit dans l’en-tête  : template...
Rotation écran / Affichage inversé (90° ou 180°) VoirSi votre écran est inversé (rotation d'angle 90° voire 180°), ceci est dû : soit aux propriétés de votre carte graphique soit à une mauvaise manipulation sur le clavier Vérifier les propriétés de la carte graphique Cliquer avec le bouton...
Prévention de l'Exécution des Données VoirParamétrer ou désactiver la Prévention d'Exécution des Données (PED) Depuis le SP2 de Windows XP (Vista inclus), une nouvelle gestion de la mémoire (mode No eXecute) a été ajoutée, elle permet aux processeurs Athlon 64 d'AMD de protéger le système...
Télécharger JPEG Lossless Rotator VoirDans la plupart des cas, les gens prennent des photos dans différentes orientations. Par conséquent, pour visionner certains fichiers, il faut les pivoter sur un angle de 90°. En effectuant la rotation, les images perdent en qualité. JPEG Lossless...
Télécharger Trilogie sécurité des données VoirComme on dit, jamais deux sans trois, alors voilà la trilogie infaillible et performant. On le surnome la « trilogie sécurité des données» parce qu’il est composé de trois programmes de protection en tout genre. Trilogie Sécurité des Données...
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...
Disque dur VoirLe rôle du disque dur Le disque dur est l'organe servant à conserver les données de manière permanente, contrairement à la mémoire vive, qui s'efface à chaque redémarrage de l'ordinateur, c'est la raison pour laquelle on parle parfois de mémoire...
Bases de données - Introduction VoirQu'est-ce qu'une base de données ? Une base de données (son abréviation est BD, en anglais DB, database) est une entité dans laquelle il est possible de stocker des données de façon structurée et avec le moins de redondance possible. Ces données...