Manipulation de données - Initialisation et remplissage

Manipulation de données - Copie

Manipulation de données - Échange d'éléments

Copie

La bibliothèque standard définit les deux algorithmes copy et copy_backward pour réaliser la copie des données des conteneurs. Ces algorithmes sont disponibles avec le fichier en-tête <algorithm>.
copy réalise une copie de tous les objets situés entre deux éléments dont il reçoit les références, du premier au dernier, dans le conteneur cible fourni en troisième argument.
L’algorithme copy_backward travaille dans le sens contraire.

copy et copy_backward

Voici la déclaration de ces deux algorithmes dans la STL :

template <class InputIterator, class OutputIterator> 
OutputIterator copy(InputIterator premier, InputIterator dernier, 
    OutputIterator destination); 

template <class BidirectionalIterator1, class BidirectionalIterator2> 
BidirectionalIterator2 copy_backward( 
    BidirectionalIterator1 premier, BidirectionalIterator1 dernier, 
    BidirectionalIterator2 fin_destination);

À savoir

InputIterator est un itérateur d’entrée. Un itérateur d’entrée est un itérateur qui doit être constructible par défaut (il doit posséder un constructeur par défaut de sorte qu’on puisse le créer sans avoir besoin de l’initialiser avec une valeur particulière), à qui nous devons pouvoir affecter une valeur (il doit posséder un constructeur de copie et un opérateur d’affectation surchargé), et il doit posséder un opérateur d’égalité surchargé == et un opérateur d’inégalité != (pour comparer deux itérateurs).
Un itérateur d’entrée est un itérateur sur lequel nous pouvons appliquer l’indirection alors qu’il pointe sur un élément d’une séquence. L’itérateur peut aussi pointer sur la fin d’une séquence. Dans ce cas, il pointe en réalité juste après l’élément final de la séquence. On dit qu’il est après-la-fin. Nous ne pouvons appliquer l’indirection à un itérateur après-la-fin.
Un itérateur d’entrée est valide si nous parvenons à obtenir un objet valide en lui appliquant l’indirection ou s’il se trouve après la fin. Un itérateur d’entrée garantit les accès en lecture pour l’objet pointé.
OutputIterator est un itérateur de sortie. Un itérateur de sortie doit être constructible par défaut, et nous devons pouvoir lui attribuer une valeur. Cet itérateur garantit les accès en écriture – mais non les accès en lecture – sur l’objet pointé.

Le code 9.2 illustre ces deux types de copie.

Code 9.2 : algorithmes de copie

#include <iostream> 
#include <algorithm>  
#include <cstring>   //pour la fonction strlen() 

using namespace std; 

int main() 
{ 
   char chaine[] = "abcdefg123"; 
   cout << "Voici la chaine initiale: " << chaine << endl; 
   //On repère la fin de la chaîne en mémoire: 
   //char *p_debut = chaine; 
   char *p_fin = chaine + strlen(chaine); 
   //On recopie les 3 derniers caractères au début de la chaîne 
   copy(p_fin-3, p_fin, chaine); 
   //On affiche le résultat : 
   cout <<"On recopie les 3 derniers caractères au début de la chaîne: "; 
   cout << chaine << endl; 
   //On écrase la chaîne par elle-même à partir du 4ème élément : 
   copy_backward(chaine, p_fin-3, p_fin); 
   // On affiche le résultat : 
   cout << "On écrase la chaîne par elle-même à partir du 4ème élément: " 
   cout <<chaine << endl; 
}


On obtient :

Voici la chaîne initiale: abcdefg123 
On recopie les 3 derniers caractères au début de la chaîne: 123defg123 
On écrase la chaîne par elle-même à partir du 4ième élément: 123123defg

À savoir

La fonction strlen() est une des fonctions de la bibliothèque C standard, qui est déclarée dans l’en-tête <cstring>. Elle permet de calculer la longueur d’une chaîne de caractères C (sans compter le caractère nul de fin).

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:08:40.Ce document intitulé « Manipulation de données - Copie » 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 Copie » dans :
[Outlook 2003] Exportation et importation de données VoirIl est possible d'exporter toutes les données personnelles (contacts, e-mails, calendrier, etc...), à condition de le paramétrer à l'exportation (voir ci-dessous). Exportation ou sauvegarde Importation ou restauration A voir...
Copier contact d'une carte sim sur un iPhone VoirProblème Avec l'iPhone 3g, comment copier les contacts qui sont sur une ancienne carte sim dans l'iPhone. Solution Pour afficher les contacts d'une carte sim sur un iphone 2G, 3G et 3GS vous devez suivre les manipulations suivantes : Rendez...
[VBA]Connecter une base de donnée (MDB) à excel VoirConnecter une base de donnée access (MDB) dans une application excel. Ajouter la référence Microsoft DAO object librairy X.X Dans un module général (Module1 par exemple) coller le code ci-dessous Sub CopieDBaccess() Dim BDexp As...
Importer et exporter des données sous MySQL VoirImportation et exportation Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...
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...
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
Collection CommentÇaMarche.net