Udostępnij za pośrednictwem


copy_backward

Przypisuje wartości elementów z zakresu źródłowego do zakresu docelowego, iterując przez sekwencję źródłową elementów oraz przypisując im nowe pozycje w kierunku do tyłu.

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

Parametry

  • _First
    Iterator dwukierunkowy odnoszący się do pozycji pierwszego elementu w zakresie źródłowym.

  • _Last
    Iterator dwukierunkowy odnoszący się do pierwszej pozycji po elemencie końcowym w zakresie źródłowym.

  • _DestEnd
    Iterator dwukierunkowy odnoszący się do pierwszej pozycji po elemencie końcowym w zakresie docelowym.

Wartość zwracana

Iterator danych wyjściowych odnoszący się do pierwszej pozycji po elemencie końcowym w zakresie docelowym, to znaczy iterator odnosi się do _DestEnd – (_Last – _First ).

Uwagi

Zakres źródłowy musi być prawidłowy i musi być wystarczająco dużo miejsca w miejscu przeznaczenia, aby pomieścić wszystkie elementy kopiowane.

Algorytm copy_backward nakłada bardziej rygorystyczne wymagania niż algorytm kopiowania.Oba iteratory, wejściowy i wyjściowy muszą być dwukierunkowe.

Algorytmy copy_backward i move_backward są jedynymi algorytmami standardowej biblioteki szablonów, które wyznaczają zakres wyjściowy za pomocą iteratora wskazującego na koniec zakresu docelowego.

Ponieważ algorytm kopiuje elementy źródła w kolejności od ostatniego elementu, zakres docelowy może pokrywać się z zakresem źródłowym, pod warunkiem, że pozycja _First zakresu źródłowego nie jest zawarta w zakresie docelowym.copy_backward może służyć do przesunięcia elementów w prawo, ale nie w lewo, chyba że nie istnieje żadne nakładanie się zakresów źródłowych i docelowych.Aby przesunąć w lewo dowolną liczbę pozycji, użyj algorytmu copy.

Algorytm copy_backward jedynie modyfikuje wartości wskazywane przez iteratory, przypisujące nowe wartości do elementów w zakresie docelowym.Nie może służyć do tworzenia nowych elementów i nie może bezpośrednio wstawiać elementów do pustego kontenera.

Przykład

// 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;
}

Dane wyjściowe

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 )

Wymagania

Nagłówek: <algorithm>

Przestrzeń nazw: std

Zobacz też

Informacje

move_backward

Standardowa biblioteka szablonów