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