std::experimental::ranges:: copy, std::experimental::ranges:: copy_if
|
Défini dans l'en-tête
<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) |
Copie les éléments dans la plage source (
[
first
,
last
)
ou
r
) dans la plage de destination commençant à
result
, en partant du premier élément de la plage source et en procédant jusqu'au dernier.
[
first
,
last
)
. Pour chaque entier non négatif
n < (last - first)
, exécute
*
(
result
+
n
)
=
*
(
first
+
n
)
. Le comportement est indéfini si
result
se trouve dans l'intervalle
[
first
,
last
)
. Dans ce cas,
ranges::copy_backward
peut être utilisé à la place.
Nonobstant les déclarations dépeintes ci-dessus, le nombre réel et l'ordre des paramètres de template pour les déclarations d'algorithmes ne sont pas spécifiés. Ainsi, si des arguments de template explicites sont utilisés lors de l'appel d'un algorithme, le programme est probablement non portable.
SommaireParamètres
Valeur de retour
Un objet
Complexité
1)
Exactement
ranges::
distance
(
first, last
)
affectations.
2)
Exactement
ranges::
distance
(
r
)
affectations.
3)
Exactement
ranges::
distance
(
first, last
)
applications de la projection et du prédicat correspondants.
4)
Exactement
ranges::
distance
(
r
)
applications de la projection et du prédicat correspondants.
Implémentations possibles
ExempleLe code suivant utilise copy pour copier le contenu d'un vecteur vers un autre et afficher le vecteur résultant :
Exécuter ce code
#include <experimental/ranges/algorithm> #include <experimental/ranges/iterator> #include <iostream> #include <numeric> #include <vector> int main() { // see https://fr.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'; } Sortie : to_vector contains: 1 2 4 5 7 8 Voir aussi
|