最終更新日時: 2026年07月22日 16時08分23秒 (JST)
rotarymars が更新

履歴 編集

function
<list>

# std::list::merge

    void merge(list& x);           // (1) C++03
    constexpr void merge(list& x); // (1) C++26

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

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

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

## 概要

2つの`list`オブジェクトを併合する。

## 要件

`comp`が狭義の弱順序として定義されていること。`*this`と`x`がその順序でソートされていること。

## 効果

`x`を`*this`にマージする。2つの`list`オブジェクトの要素を`*this`に併合し、`x`はマージ後に空となる。
マージ後、`x`の要素に対するイテレータおよび参照は無効にならない。

## 戻り値

なし

## 例外

比較操作が例外を投げない場合、この関数は例外を投げない。

## 計算量

高々`distance(begin`()`, end()) + distance(x.begin(), x.end()) - 1`回の比較

## 備考

- この操作は安定である。
- 移動先と移動元のアロケータが等値でない場合(`get_allocator() != x.get_allocator()`の場合)、動作は未定義である。

## 例

    #include <iostream>
    #include <list>
    #include <utility>

    int main()
    {
      std::list<int> a = {1, 3, 4};
      std::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

## 参照

- P3372R3 constexpr containers and adaptors