std::experimental::ranges:: copy, std::experimental::ranges:: copy_if
|
Definido en el encabezado
<experimental/ranges/algorithm>
|
||
|
template
<
InputIterator I, Sentinel
<
I
>
S, WeaklyIncrementable O
>
requires IndirectlyCopyable
<
I, O
>
|
(1) | (ranges TS) |
|
template
<
InputRange R, WeaklyIncrementable O
>
requires IndirectlyCopyable
<
ranges::
iterator_t
<
R
>
, O
>
|
(2) | (ranges TS) |
|
template
<
InputIterator I, Sentinel
<
I
>
S, WeaklyIncrementable O,
class
Proj
=
ranges::
identity
,
|
(3) | (ranges TS) |
|
template
<
InputRange R, WeaklyIncrementable O,
class
Proj
=
ranges::
identity
,
|
(4) | (ranges TS) |
Copia elementos en el rango fuente (
[
first
,
last
)
o
r
) hacia el rango destino comenzando en
result
, iniciando desde el primer elemento en el rango fuente y procediendo hasta el último.
[
first
,
last
)
. Para cada entero no negativo
n < (last - first)
, ejecuta
*
(
result
+
n
)
=
*
(
first
+
n
)
. El comportamiento es indefinido si
result
está dentro del rango
[
first
,
last
)
. En este caso, puede usarse
ranges::copy_backward
en su lugar.
No obstante las declaraciones representadas anteriormente, el número real y el orden de los parámetros de plantilla para las declaraciones de algoritmos no está especificado. Por lo tanto, si se utilizan argumentos de plantilla explícitos al invocar un algoritmo, el programa probablemente no sea portable.
ContenidoParámetros
Valor de retorno
Un objeto
Complejidad
1)
Exactamente
ranges::
distance
(
first, last
)
asignaciones.
2)
Exactamente
ranges::
distance
(
r
)
asignaciones.
3)
Exactamente
ranges::
distance
(
first, last
)
aplicaciones de la proyección y predicado correspondientes.
4)
Exactamente
ranges::
distance
(
r
)
aplicaciones de la proyección y predicado correspondientes.
Posibles implementaciones
EjemploEl siguiente código utiliza copy para copiar el contenido de un vector a otro y mostrar el vector resultante:
Ejecutar este código
#include <experimental/ranges/algorithm> #include <experimental/ranges/iterator> #include <iostream> #include <numeric> #include <vector> int main() { // see https://es.cppreference.net/w/cpp/language/namespace_alias namespace ranges = std::experimental::ranges; std::vector<int> from_vector(10); std::iota(from_vector.begin(), from_vector.end(), 0); std::vector<int> to_vector; ranges::copy_if(from_vector.begin(), from_vector.end(), ranges::back_inserter(to_vector), [](const auto i) { return i % 3; }); // or, alternatively, // std::vector<int> to_vector(from_vector.size()); // std::copy(from_vector, to_vector.begin()); std::cout << "to_vector contains: "; ranges::copy(to_vector, ranges::ostream_iterator<int>(std::cout, " ")); std::cout << '\n'; } Salida: to_vector contains: 1 2 4 5 7 8 Véase también
|