std::experimental::ranges:: copy, std::experimental::ranges:: copy_if
|
Definiert im Header
<experimental/ranges/algorithm>
|
||
|
template
<
InputIterator I, Sentinel
<
I
>
S, WeaklyIncrementable O
>
erfordert IndirectlyCopyable
<
I, O
>
|
(1) | (ranges TS) |
|
template
<
InputRange R, WeaklyIncrementable O
>
erfordert 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) |
Kopiert Elemente im Quellbereich (
[
first
,
last
)
oder
r
) in den Zielbereich beginnend bei
result
, startend vom ersten Element im Quellbereich und fortfahrend bis zum letzten.
[
first
,
last
)
. Für jede nicht-negative Ganzzahl
n < (last - first)
, führt
*
(
result
+
n
)
=
*
(
first
+
n
)
aus. Das Verhalten ist undefiniert, wenn
result
innerhalb des Bereichs
[
first
,
last
)
liegt. In diesem Fall kann stattdessen
ranges::copy_backward
verwendet werden.
Ungeachtet der oben dargestellten Deklarationen sind die tatsächliche Anzahl und Reihenfolge der Template-Parameter für Algorithmusdeklarationen nicht spezifiziert. Daher ist das Programm wahrscheinlich nicht portabel, wenn explizite Template-Argumente beim Aufruf eines Algorithmus verwendet werden.
InhaltsverzeichnisParameter
Rückgabewert
Ein
Komplexität
1)
Genau
ranges::
distance
(
first, last
)
Zuweisungen.
2)
Genau
ranges::
distance
(
r
)
Zuweisungen.
3)
Exakt
ranges::
distance
(
first, last
)
Anwendungen der entsprechenden Projektion und Prädikat.
4)
Genau
ranges::
distance
(
r
)
Anwendungen der entsprechenden Projektion und des Prädikats.
Mögliche Implementierungen
BeispielDer folgende Code verwendet copy, um sowohl den Inhalt eines Vektors in einen anderen zu kopieren als auch den resultierenden Vektor anzuzeigen:
Diesen Code ausführen
#include <experimental/ranges/algorithm> #include <experimental/ranges/iterator> #include <iostream> #include <numeric> #include <vector> int main() { // see https://de.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'; } Ausgabe: to_vector contains: 1 2 4 5 7 8 Siehe auch
|