void merge(forward_list& x); // (1)
void merge(forward_list&& x); // (2)
template <class Compare>
void merge(forward_list& x, Compare comp); // (3)
template <class Compare>
void merge(forward_list&& x, Compare comp); // (4)
概要
2つのforward_list
オブジェクトを併合する。
要件
comp
が狭義の弱順序として定義されていること。*this
とx
がその順序でソートされていること。get_allocator() == x.get_allocator()
であること。(C++14)
効果
2つのソート済みイテレータ範囲[begin(), end())
と[x.begin(), x.end())
をマージする。2つのforward_list
オブジェクトの要素を*this
に併合し、x
はマージ後に空となる。
マージ後、x
の要素に対するイテレータおよび参照は無効にならない。
戻り値
なし
例外
比較操作が例外を投げない場合、この関数は例外を投げない。
計算量
高々distance(begin
(), end()) + distance(x.begin(), x.end()) - 1
回の比較
備考
- この操作は安定である。
this->get_allocator() != x.get_allocator()
である場合、その振る舞いは未定義。(C++14)
例
#include <iostream>
#include <forward_list>
#include <utility>
int main()
{
std::forward_list<int> a = {1, 3, 4};
std::forward_list<int> b = {2, 5, 6};
a.merge(std::move(b));
for (int x : a) {
std::cout << x << std::endl;
}
}
出力
1
2
3
4
5
6
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0(&&バージョンのみ実装されている) ✅
- ICC: ??
- Visual C++: ✅, 2010 ✅, 2012 ✅, 2013 ✅, 2015 ✅, 2017 ✅
- 2010は、
&
バージョン(1)と(3)のみ実装されている。
- 2010は、