copy_backward
Atribui os valores dos elementos de um intervalo de origem a um intervalo de destino, iterando pela sequência de elementos de origem e atribuindo-lhes novas posições em uma direção retroativa.
template<class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward(
BidirectionalIterator1 _First,
BidirectionalIterator1 _Last,
BidirectionalIterator2 _DestEnd
);
Parâmetros
_First
Um iterador bidirecional que trata da posição do primeiro elemento no intervalo de origem._Last
Um iterador bidirecional que trata da posição que está logo atrás do elemento final no intervalo de origem._DestEnd
Um iterador bidirecional que trata da posição que está logo atrás do elemento final no intervalo de destino.
Valor de retorno
Um iterador de saída que trata a posição que está logo após o elemento final no intervalo de destino, isto é, o iterador trata _DestEnd – (_Last – _First ).
Comentários
O intervalo de origem deve ser válido e deve haver espaço suficiente no destino para conter todos os elementos que estão sendo copiados.
O algoritmo copy_backward impõe requisitos mais estritos do que o algoritmo de cópia. Seus iteradores de entrada e de saída devem ser bidirecionais.
Os algoritmos copy_backward e move_backward são os únicos algoritmos da Biblioteca de Modelos Padrão que designam o intervalo de saída com um iterador que aponta para o fim do intervalo de destino.
Como o algoritmo copia os elementos de origem em ordem, começando com o último elemento, o intervalo de destino pode ficar sobreposto ao intervalo de origem fornecido na posição _First do intervalo de origem, que não está contido no intervalo de destino. copy_backward pode ser usado para deslocar elementos à direita mas não à esquerda, a menos que não haja nenhuma sobreposição entre os intervalos de origem e destino. Para deslocar para a esquerda qualquer número de posições, use o algoritmo copy.
O algoritmo copy_backward modifica somente os valores apontados pelos iteradores, atribuindo novos valores a elementos no intervalo de destino. Não pode ser usado para criar novos elementos e não pode inserir os elementos diretamente em um contêiner vazio.
Exemplo
// 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;
}
Saída
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 )
Requisitos
Cabeçalho: <algorithm>
Namespace: std