std::copiar algoritmo

plantilla de función

estándar::copiar

plantilla <clase InputIterator, clase OutputIterator> copia de OutputIterator (primero InputIterator, último InputIterator, resultado de OutputIterator);

el rango de copia del elemento

Copia los elementos del rango [primero, último] en el rango que comienza en resultado.

La función devuelve un iterador al final del rango de destino (apunta al elemento después del último elemento copiado).

Estos rangos no deben superponerse de tal manera que el resultado apunte a un elemento en el rango [primero, último]. Para este caso, consulte  copy_backward .


El comportamiento de esta plantilla de función es equivalente a:

template<class InputIterator, class OutputIterator>
  OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
{
  while (first!=last) {
    *result = *first;
    ++result; ++first;
  }
  return result;
}

parámetro:

primero último

Introduzca iteradores  en las posiciones inicial y final de la secuencia que se va a copiar. El rango utilizado es [primero, último], que incluye todos los elementos entre primero y último, incluido el elemento señalado por primero, pero excluyendo el elemento señalado por último.

resultado

Envía un iterador  a la posición inicial en la secuencia de destino. Esto no debería apuntar a ningún elemento en el rango [primero, último].

valor de retorno

Un iterador hasta el final del rango objetivo de elementos copiados.

ejemplo

// copy algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::copy
#include <vector>       // std::vector

int main () {
  int myints[]={10,20,30,40,50,60,70};
  std::vector<int> myvector (7);

  std::copy ( myints, myints+7, myvector.begin() );

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it = myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;

  std::cout << '\n';

  return 0;
}


producción:

mivector contiene: 10 20 30 40 50 60 70

Adjunto:

copy solo se encarga de copiar, no de solicitar espacio, por lo que debe haber suficiente espacio antes de copiar. Este código fallará si el tamaño del contenedor es menor que la longitud N de la secuencia de entrada. Entonces, en este momento, se introdujo back_inserter, de la siguiente manera

std::copy(src.begin(), src.end(), std::back_inserter(dest));


La función de plantilla back_inserter proporcionada por la biblioteca estándar es muy conveniente porque devuelve un iterador back_insert_iterator para el contenedor, de modo que los elementos copiados se agregan al final del contenedor. (No importa si el contenedor está vacío).

En este caso, una alternativa es utilizar back_insert_iterator como parámetro de destino. El iterador expande el contenedor de destino expandiendo elementos para cada copia, asegurándose de que el contenedor sea lo suficientemente grande para contener cada elemento.
 

Referencia del archivo adjunto: Enlace

Supongo que te gusta

Origin blog.csdn.net/weixin_58045467/article/details/130834164
Recomendado
Clasificación