std::forward_list<T,Allocator>:: merge
|
void
merge
(
forward_list
&
other
)
;
|
(1) |
(seit C++11)
(constexpr seit C++26) |
|
void
merge
(
forward_list
&&
other
)
;
|
(2) |
(seit C++11)
(constexpr seit C++26) |
|
template
<
class
Compare
>
void merge ( forward_list & other, Compare comp ) ; |
(3) |
(seit C++11)
(constexpr seit C++26) |
|
template
<
class
Compare
>
void merge ( forward_list && other, Compare comp ) ; |
(4) |
(seit C++11)
(constexpr seit C++26) |
Führt zwei sortierte Listen zu einer sortierten Liste zusammen.
- Wenn other auf dasselbe Objekt wie * this verweist, wird nichts unternommen.
- Andernfalls werden alle Elemente von other zu * this übertragen. other ist nach dem Zusammenführen leer.
Dieser Vorgang ist stabil:
- Für äquivalente Elemente in den beiden Listen gehen die Elemente von * this stets den Elementen von other voraus.
- Die Reihenfolge äquivalenter Elemente von * this und other ändert sich nicht.
- * this oder other ist nicht sortiert bezüglich des Vergleichs comp .
- get_allocator ( ) == other. get_allocator ( ) ist false .
Keine Iteratoren oder Referenzen werden ungültig. Die Zeiger und Referenzen auf die Elemente, die von * this verschoben wurden, sowie die Iteratoren, die auf diese Elemente verweisen, werden auf dieselben Elemente von * this verweisen, anstatt auf other .
Inhaltsverzeichnis |
Parameter
| other | - | ein weiterer Container zur Zusammenführung |
| comp | - |
Vergleichsfunktionsobjekt (d.h. ein Objekt, das die Anforderungen von
Compare
erfüllt), das
true
zurückgibt, wenn das erste Argument
kleiner
als (d.h. vor dem zweiten angeordnet ist) das zweite Argument ist.
Die Signatur der Vergleichsfunktion sollte folgender entsprechen: bool cmp ( const Type1 & a, const Type2 & b ) ;
Obwohl die Signatur nicht
const
&
benötigt, darf die Funktion die übergebenen Objekte nicht modifizieren und muss alle Werte der Typen (möglicherweise const)
|
| Typanforderungen | ||
-
Compare
muss die Anforderungen von
Compare
erfüllen.
|
||
Exceptions
Wenn aus irgendeinem Grund eine Exception ausgelöst wird, haben diese Funktionen keine Wirkung ( strong exception safety guarantee ). Außer wenn die Exception von einem Vergleich stammt.
Komplexität
Wenn other auf dasselbe Objekt wie * this verweist, werden keine Vergleiche durchgeführt.
Andernfalls, gegeben N 1 als std:: distance ( begin ( ) , end ( ) ) und N 2 als std:: distance ( other. begin ( ) , other. end ( ) ) :
Beispiel
#include <iostream> #include <forward_list> std::ostream& operator<<(std::ostream& ostr, const std::forward_list<int>& list) { for (const int i : list) ostr << ' ' << i; return ostr; } int main() { std::forward_list<int> list1 = {5, 9, 1, 3, 3}; std::forward_list<int> list2 = {8, 7, 2, 3, 4, 4}; list1.sort(); list2.sort(); std::cout << "list1: " << list1 << '\n'; std::cout << "list2: " << list2 << '\n'; list1.merge(list2); std::cout << "merged:" << list1 << '\n'; }
Ausgabe:
list1: 1 3 3 5 9 list2: 2 3 4 4 7 8 merged: 1 2 3 3 3 4 4 5 7 8 9
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 2045 | C++11 |
O(1) Knotenverschiebung konnte nicht garantiert werden, wenn
get_allocator ( ) ! = other. get_allocator ( ) |
das Verhalten ist
in diesem Fall undefiniert |
| LWG 3088 | C++11 |
der Effekt, wenn
*
this
und
other
auf dasselbe
Objekt verweisen, war nicht spezifiziert operator < konnte sich für Zeigerelemente falsch verhalten |
als No-Op spezifiziert
implementierungsdefiniert strenge Totalordnung verwendet |
Siehe auch
überträgt Elemente aus einer anderen
forward_list
(öffentliche Elementfunktion) |
|
|
vereinigt zwei sortierte Bereiche
(Funktions-Template) |
|
|
vereinigt zwei geordnete Bereiche direkt
(Funktions-Template) |
|
|
(C++20)
|
vereinigt zwei sortierte Bereiche
(Algorithmus-Funktionsobjekt) |
|
(C++20)
|
vereinigt zwei geordnete Bereiche direkt
(Algorithmus-Funktionsobjekt) |