void merge( forward_list& other ); | (1) | (since C++11) |
void merge( forward_list&& other ); | (2) | (since C++11) |
template < class Compare > void merge( forward_list& other, Compare comp ); | (3) | (since C++11) |
template < class Compare > void merge( forward_list&& other, Compare comp ); | (4) | (since C++11) |
The function does nothing if other
refers to the same object as *this
.
Otherwise, merges two sorted lists into one. The lists should be sorted into ascending order. No elements are copied, and the container other
becomes empty after the merge. No iterators or references become invalidated, except that the iterators of moved elements now refer into *this
, not into other
. The first version uses operator<
to compare the elements, the second version uses the given comparison function comp
.
This operation is stable: for equivalent elements in the two lists, the elements from *this
shall always precede the elements from other
, and the order of equivalent elements of *this
and other
does not change.
If get_allocator() != other.get_allocator()
, the behavior is undefined.
other | - | another container to merge |
comp | - | comparison function object (i.e. an object that satisfies the requirements of Compare) which returns true if the first argument is less than (i.e. is ordered before) the second. The signature of the comparison function should be equivalent to the following:
While the signature does not need to have const&, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const) |
(none).
If an exception is thrown, this function has no effect (strong exception guarantee), except if the exception comes from a comparison.
If other
refers to the same object as *this
, no comparisons are performed.
Otherwise, given M
and N
as std::distance(begin(), end())
and std::distance(other.begin(), other.end())
respectively:
M + N - 1
comparisons using operator<
M + N - 1
comparisons using comp
#include <iostream> #include <forward_list> std::ostream& operator<<(std::ostream& ostr, const std::forward_list<int>& list) { for (const auto &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'; }
Output:
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
(C++11) | moves elements from another forward_list (public member function) |
merges two sorted ranges (function template) |
|
merges two ordered ranges in-place (function template) |
|
(C++20) | merges two sorted ranges (niebloid) |
(C++20) | merges two ordered ranges in-place (niebloid) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/forward_list/merge