std::forward_list<T,Allocator>:: merge
|
void
merge
(
forward_list
&
other
)
;
|
(1) |
(C++11부터)
(C++26부터 constexpr) |
|
void
merge
(
forward_list
&&
other
)
;
|
(2) |
(C++11부터)
(C++26부터 constexpr) |
|
template
<
class
Compare
>
void merge ( forward_list & other, Compare comp ) ; |
(3) |
(C++11부터)
(C++26부터 constexpr) |
|
template
<
class
Compare
>
void merge ( forward_list && other, Compare comp ) ; |
(4) |
(C++11부터)
(C++26부터 constexpr) |
두 개의 정렬된 목록을 하나의 정렬된 목록으로 병합합니다.
- 만약 other 가 * this 와 동일한 객체를 참조하면, 아무 작업도 수행하지 않습니다.
- 그렇지 않으면, other 의 모든 요소를 * this 로 전송합니다. 병합 후 other 는 비어 있게 됩니다.
이 연산은 안정적입니다:
- 두 목록에서 동등한 요소들에 대해, * this 의 요소들은 항상 other 의 요소들보다 앞에 위치합니다.
- * this 와 other 의 동등한 요소들의 순서는 변경되지 않습니다.
- * this 또는 other 가 비교자 comp 에 대해 정렬되지 않은 경우 .
- get_allocator ( ) == other. get_allocator ( ) 가 false 인 경우.
어떤 반복자나 참조도 무효화되지 않습니다. * this 에서 이동된 요소들에 대한 포인터와 참조, 그리고 이 요소들을 참조하는 반복자들은 other 가 아닌 * this 의 동일한 요소들을 참조하게 됩니다.
목차 |
매개변수
| other | - | 병합할 다른 컨테이너 |
| comp | - |
비교 함수 객체(즉,
Compare
요구 사항을 만족하는 객체)로 첫 번째 인수가 두 번째 인수보다
작은 경우
(즉, 순서상
앞서는 경우
)
true
를 반환합니다.
비교 함수의 시그니처는 다음과 동일해야 합니다: bool cmp ( const Type1 & a, const Type2 & b ) ;
시그니처에
const
&
가 필요하지는 않지만, 함수는 전달된 객체를 수정해서는 안 되며
값 범주
에 관계없이 (가능한 const)
|
| 타입 요구 사항 | ||
-
Compare
는
Compare
요구 사항을 충족해야 합니다.
|
||
예외
어떤 이유로든 예외가 발생하면, 이러한 함수들은 아무런 효과를 가지지 않습니다 ( strong exception safety guarantee ). 단, 비교 연산에서 발생한 예외는 제외합니다.
복잡도
만약 other 가 * this 와 동일한 객체를 참조하는 경우, 비교 연산이 수행되지 않습니다.
그렇지 않으면, N 1 을 std:: distance ( begin ( ) , end ( ) ) 로, N 2 을 std:: distance ( other. begin ( ) , other. end ( ) ) 로 설정합니다:
예제
#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'; }
출력:
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++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2045 | C++11 |
O(1) 노드 이동이 보장될 수 없음
get_allocator ( ) ! = other. get_allocator ( ) |
이 경우 동작은
정의되지 않음 |
| LWG 3088 | C++11 |
*
this
와
other
가 동일한 객체를
참조할 때의 효과가 명시되지 않음 operator < 가 포인터 요소에 대해 오동작 가능 |
no-op로 명시
구현에 따라 정의됨 엄격한 전체 순서 사용 |
참고 항목
다른
forward_list
로부터 요소들을 전송
(public member function) |
|
|
두 개의 정렬된 범위를 병합
(function template) |
|
|
두 개의 정렬된 범위를 제자리에서 병합
(function template) |
|
|
(C++20)
|
두 개의 정렬된 범위를 병합
(algorithm function object) |
|
(C++20)
|
두 개의 정렬된 범위를 제자리에서 병합
(algorithm function object) |