Espacios de nombres
Variantes
Acciones

std::copy_backward

De cppreference.com
< cpp‎ | algorithm
 
 
Biblioteca de algoritmos
Políticas de ejecución (C++17)
Operaciones de secuencia no modificantes
(C++11)(C++11)(C++11)
(C++17)
Operaciones de secuencia modificantes
(C++11)
copy_backward
(C++11)

Operaciones en almacenamiento no inicializado
Operaciones de partición
Operaciones de ordenación
(C++11)
Operaciones de búsqueda binaria
Operaciones de conjuntos (en rangos ordenados)
Operaciones de pila
(C++11)
Operaciones mínimo/máximo
(C++11)
(C++17)
Permutaciones
Operaciones numéricas
Bibliotecas C
 
Definido en el archivo de encabezado <algorithm>
template< class BidirIt1, class BidirIt2 >
BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );
(hasta C++20)
template< class BidirIt1, class BidirIt2 >
constexpr BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );
(desde C++20)

Copia los elementos del rango definido por [firstlast), a otro rango que termina en d_last. Los elementos se copian en orden inverso (el último elemento se copia primero), pero se conserva su orden relativo.

El comportamiento no está definido si d_last está dentro de [firstlast). std::copy debe usarse en lugar de std::copy_backward en ese caso.

Contenido

[editar] Parámetros

first, last - El rango de los elementos a copiar.
d_last - El final del rango de destino.
Requisitos de tipo
-
BidirIt debe satisfacer los requisitos de BidirectionalIterator.

[editar] Valor de retorno

Un iterador al último elemento copiado.

[editar] Complejidad

Exactamente last - first asignaciones.

[editar] Notas

Al copiar rangos superpuestos, std::copy es apropiado cuando se copia a la izquierda (el comienzo del rango de destino está fuera del rango de origen) mientras que std::copy_backward es apropiado cuando se copia a la derecha (el final del rango de destino está fuera del rango de origen).

[editar] Posible implementación

template<class BidirIt1, class BidirIt2>
BidirIt2 copy_backward(BidirIt1 first, BidirIt1 last, BidirIt2 d_last)
{
    while (first != last)
        *(--d_last) = *(--last);
 
    return d_last;
}

[editar] Ejemplo

#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
 
int main()
{
    std::vector<int> source(4);
    std::iota(source.begin(), source.end(), 1); // se rellena con 1, 2, 3, 4
 
    std::vector<int> destination(6);
 
    std::copy_backward(source.begin(), source.end(), destination.end());
 
    std::cout << "El destino contiene: ";
    for (auto i: destination)
        std::cout << i << ' ';
    std::cout << '\n';
}

Salida:

El destino contiene: 0 0 1 2 3 4

[editar] Véase también

Copia un rango de elementos a una nueva ubicación.
(plantilla de función) [editar]
Copia un rango de elementos en orden inverso.
(niebloid) [editar]