Partager via


copy_backward

Assigne les valeurs des éléments d'une plage source à une plage de destination, en procédant à une itération via la séquence source d'éléments et en leur assignant de nouvelles positions vers le haut.

template<class BidirectionalIterator1, class BidirectionalIterator2> 
   BidirectionalIterator2 copy_backward( 
      BidirectionalIterator1 _First,  
      BidirectionalIterator1 _Last, 
      BidirectionalIterator2 _DestEnd 
   );

Paramètres

  • _First
    Itérateur bidirectionnel se rapportant à la position du premier élément dans la plage source.

  • _Last
    Itérateur bidirectionnel se rapportant à la position située immédiatement après l'élément final dans la plage source.

  • _DestEnd
    Itérateur bidirectionnel se rapportant à la position située immédiatement après l'élément final dans la plage de destination.

Valeur de retour

Itérateur de sortie se rapportant à la position située immédiatement après l'élément final dans la plage de destination. Autrement dit, l'itérateur se rapporte à _DestEnd – (_Last – _First).

Notes

La plage source doit être valide et il doit y avoir suffisamment d'espace au niveau de la destination pour contenir tous les éléments qui sont copiés.

L'algorithme copy_backward impose des exigences plus strictes que celles de l'algorithme de copie. Ses itérateurs d'entrée et de sortie doivent être bidirectionnels.

Les algorithmes copy_backward et move_backward sont les seuls algorithmes STL (Standard Template Library) qui désignent la plage de sortie avec un itérateur pointant sur la fin de la plage de destination.

Étant donné que l'algorithme copie les éléments source dans l'ordre en commençant par le dernier élément, la plage de destination peut chevaucher la plage source, à supposer que la position _First de la plage source ne soit pas contenue dans la plage de destination. copy_backward peut être utilisé pour décaler des éléments vers la droite mais pas vers la gauche, à moins qu'il n'y ait aucun chevauchement entre la plage source et celle de destination. Pour décaler vers la gauche d'un nombre quelconque de positions, utilisez l'algorithme de copie.

L'algorithme copy_backward modifie uniquement les valeurs sur lesquelles pointent les itérateurs, assignant de nouvelles valeurs aux éléments dans la plage de destination. Il ne peut pas être utilisé pour créer de nouveaux éléments et ne peut pas insérer directement d'éléments dans un conteneur vide.

Exemple

// alg_copy_bkwd.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
   using namespace std;
   vector <int> v1, v2;
   vector <int>::iterator Iter1, Iter2;

   int i;
   for ( i = 0 ; i <= 5 ; ++i )
      v1.push_back( 10 * i );

   int ii;
   for ( ii = 0 ; ii <= 10 ; ++ii )
      v2.push_back( 3 * ii );

   cout << "v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; ++Iter1 )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   cout << "v2 = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
      cout << *Iter2 << " ";
   cout << ")" << endl;

   // To copy_backward the first 3 elements of v1 into the middle of v2
   copy_backward( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 7 );

   cout << "v2 with v1 insert = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
      cout << *Iter2 << " ";
   cout << ")" << endl;

   // To shift the elements inserted into v2 two positions
   // to the right
   copy_backward( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 9 );

   cout << "v2 with shifted insert = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
      cout << *Iter2 << " ";
   cout << ")" << endl;
}

Sortie

v1 = ( 0 10 20 30 40 50 )
v2 = ( 0 3 6 9 12 15 18 21 24 27 30 )
v2 with v1 insert = ( 0 3 6 9 0 10 20 21 24 27 30 )
v2 with shifted insert = ( 0 3 6 9 0 10 0 10 20 27 30 )

Configuration requise

En-tête : <algorithme>

Espace de noms : std

Voir aussi

Référence

move_backward

Bibliothèque STL (Standard Template Library)