最終更新日時(UTC): 2026年02月17日 14時22分33秒
Akira Takahashi が更新

履歴 編集

function
<forward_list>

# std::forward_list::merge(C++11)

    void merge(forward_list& x);           // (1) C++11
    constexpr void merge(forward_list& x); // (1) C++26

    void merge(forward_list&& x);           // (2) C++11
    constexpr void merge(forward_list&& x); // (2) C++26

    template <class Compare>
    void merge(forward_list& x, Compare comp);           // (3) C++11
    template <class Compare>
    constexpr void merge(forward_list& x, Compare comp); // (3) C++26

    template <class Compare>
    void merge(forward_list&& x, Compare comp);           // (4) C++11
    template <class Compare>
    constexpr void merge(forward_list&& x, Compare comp); // (4) C++26

## 概要

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)のみ実装されている。

## 参照

- LWG Issue 2045. `forward_list::merge` and `forward_list::splice_after` with unequal allocators
- LWG Issue 2122. `merge()` stability for lists versus forward lists
- LWG Issue 2123. `merge()` allocator requirements for lists versus forward lists
- P3372R3 constexpr containers and adaptors