Sdílet prostřednictvím


copy_backward

Přiřadí hodnoty prvků ze zdrojového rozsahu do cílového rozsahu a provede iterace přes zdrojové sekvence prvků a přiřadí je novým pozicím směrem dozadu.

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

Parametry

  • _First
    Obousměrný iterátor, který adresuje umístění prvního prvku ve zdrojové oblasti.

  • _Last
    Obousměrný iterátor, který adresuje umístění jedno místo za posledním prvkem ve zdrojové oblasti.

  • _DestEnd
    Obousměrný iterátor, který adresuje umístění jedno místo za posledním prvkem v cílové oblasti.

Vrácená hodnota

Výstupní iterace adresující pozici, která je jedno místo za posledním prvek v cílové oblasti, tedy iterátor adresuje _DestEnd – (_Last – _First).

Poznámky

Zdrojová oblast musí být platná a v cíli musí být dostatek místa na pro všechny prvky, které jsou kopírovány.

Algoritmus copy_backward vyžaduje přísnější požadavky než algoritmus kopírování.Vstupní i výstupní iterátory musí být obousměrné.

Algoritmy copy_backward a move_backward jsou jediné algoritmy standardní knihovny šablon s vyznačením výstupní oblasti s iterátorem ukazujícím na konec cílové oblasti.

Protože algoritmus kopíruje zdrojové prvky v pořadí od posledního prvku, cílová oblast se může překrývat se zdrojové oblasti, pokud pozice _First zdrojové oblasti není obsažena v cílové oblasti.copy_backward lze použít k posunu prvků doprava, ale nikoli vlevo, pokud nedojde k překrytí mezi zdrojovou a cílovou oblastí.Chcete-li posunout vlevo libovolný počet pozic, použijte algoritmus copy.

Algoritmus copy_backward upravuje pouze hodnoty odkazované iterátory, přičemž přiřazuje nové hodnoty prvkům v cílové oblasti.Nelze ho použít k vytvoření nových prvků a nelze vložit prvky do prázdného zásobníku přímo.

Příklad

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

Výstup

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 )

Požadavky

Hlavička: <algorithm>

Obor názvů: std

Viz také

Referenční dokumentace

move_backward

Standardní knihovna šablon