copy_backward

Atribui os valores dos elementos de um intervalo de origem a um intervalo de destino, iterando com a seqüência de origem de elementos e atribuindo-lhes novos posições em uma direção inversa.

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

Parâmetros

  • _First
    Um iterador bidirecional que trata a posição do primeiro elemento no intervalo de origem.

  • _Last
    Um iterador bidirecional que trata a posição que é uma após o elemento final no intervalo de origem.

  • _DestEnd
    Um iterador bidirecional que trata a posição de essa após o elemento final no intervalo de destino.

Valor de retorno

Um iterador de saída que trata a posição que é uma após o elemento final no intervalo de destino, isto é, o iterador aborda _ 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 de copy_backward impor um requisitos estritos mais do que esse algoritmo de impressão.Seus iteradores de entrada e saída devem ser bidirecionais.

O algoritmo de copy_backward é o único algoritmo padrão da biblioteca do modelo que designa o intervalo de saída com um iterador que aponta para o final do intervalo de destino.

Porque o algoritmo copiar os elementos de origem no início de pedido com o último elemento, o intervalo de destino pode sobrepor com o intervalo de origem forneceu a posição de _First do intervalo de origem não está contido no intervalo de destino.copy_backward pode ser usado para reposicionar elementos à direita mas não à esquerda, a menos que não haja nenhuma sobreposição entre a fonte e os intervalos de destino.Para deslocar à esquerda qualquer número de posições, use o algoritmo de impressão .

O algoritmo de copy_backward altera somente os valores apontados por iteradores, atribuindo valores novos elementos no intervalo de destino.Não pode ser usado para criar novos elementos e não pode inserir os elementos em um contêiner vazio diretamente.

copy_backward tem dois formulários relacionados:

Para obter informações sobre como essas funções se comportam, consulte Iteradores selecionados.

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

Consulte também

Referência

Standard Template Library