std:: copy_backward
|
Definiert im Header
<algorithm>
|
||
|
template
<
class
BidirIt1,
class
BidirIt2
>
BidirIt2 copy_backward ( BidirIt1 first, BidirIt1 last, BidirIt2 d_last ) ; |
(constexpr seit C++20) | |
Kopiert die Elemente aus dem Bereich
[
first
,
last
)
in einen anderen Bereich, der bei
d_last
endet. Die Elemente werden in umgekehrter Reihenfolge kopiert (das letzte Element wird zuerst kopiert), jedoch bleibt ihre relative Reihenfolge erhalten.
Das Verhalten ist undefiniert, falls
d_last
innerhalb von
(
first
,
last
]
liegt.
std::copy
muss in diesem Fall anstelle von
std::copy_backward
verwendet werden.
Inhaltsverzeichnis |
Parameter
| first, last | - | das Iteratorpaar, das den Quell- Bereich der zu kopierenden Elemente definiert |
| d_last | - | das Ende des Zielbereichs |
| Typanforderungen | ||
-
BidirIt
muss die Anforderungen von
LegacyBidirectionalIterator
erfüllen.
|
||
Rückgabewert
Iterator zum letzten kopierten Element.
Komplexität
Genau std:: distance ( first, last ) Zuweisungen.
Hinweise
Beim Kopieren überlappender Bereiche ist
std::copy
geeignet, wenn nach links kopiert wird (der Anfang des Zielbereichs liegt außerhalb des Quellbereichs), während
std::copy_backward
geeignet ist, wenn nach rechts kopiert wird (das Ende des Zielbereichs liegt außerhalb des Quellbereichs).
Mögliche Implementierung
template<class BidirIt1, class BidirIt2> BidirIt2 copy_backward(BidirIt1 first, BidirIt1 last, BidirIt2 d_last) { while (first != last) *(--d_last) = *(--last); return d_last; } |
Beispiel
#include <algorithm> #include <iostream> #include <numeric> #include <vector> int main() { std::vector<int> source(4); std::iota(source.begin(), source.end(), 1); // fills with 1, 2, 3, 4 std::vector<int> destination(6); std::copy_backward(source.begin(), source.end(), destination.end()); std::cout << "destination contains: "; for (auto i: destination) std::cout << i << ' '; std::cout << '\n'; }
Ausgabe:
destination contains: 0 0 1 2 3 4
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 1206 | C++98 |
1. das Verhalten war wohldefiniert, wenn
d_last
==
last
2. das Verhalten war undefiniert, wenn d_last == first |
1. als undefiniert festgelegt
2. als wohldefiniert festgelegt |
Siehe auch
|
(C++11)
|
kopiert eine Reihe von Elementen an einen neuen Speicherort
(Funktions-Template) |
|
(C++20)
|
kopiert eine Reihe von Elementen in umgekehrter Reihenfolge
(Algorithmus-Funktionsobjekt) |