• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <list>

    std::list::operator=

    list& operator=(const list& x);         // (1)
    list& operator=(list&& x);              // (2) C++11
    list& operator=(list&& x)
      noexcept(allocator_traits<Allocator>::is_always_equal::value); // (2) C++17
    list& operator=(initializer_list<T> x); // (3) C++11
    

    概要

    • (1) : コピー代入。
    • (2) : ムーブ代入。
    • (3) : 初期化子リストを代入。

    効果

    • (1) : 同じテンプレートパラメータを持つ list クラスのオブジェクトをコピー代入する。*this の全ての要素が解放され、x の全ての要素が *this にコピーされる。
    • (2) : 同じテンプレートパラメータを持つ list クラスのオブジェクトをムーブ代入する。*this の全ての要素が解放され、x の全ての要素が *this にムーブされる。
    • (3) : 同じテンプレートパラメータを持つ initializer_list クラスのオブジェクトをコピー代入する。*this の全ての要素が解放され、x の全ての要素が *this にコピーされる。

    戻り値

    *this

    計算量

    • (1) : 全要素のデストラクタ呼び出しとコピーを行うために、線形時間
    • (2) : 全要素のデストラクタ呼び出しをするために、線形時間
    • (3) : 全要素のデストラクタ呼び出しとコピーを行うために、線形時間

    #include <cassert>
    #include <list>
    #include <algorithm>
    
    int main ()
    {
      // コピー代入
      {
        std::list<int> ls1 = { 1, 2, 3 };
        std::list<int> ls2;
    
        ls2 = ls1;
    
        assert(ls1 == ls2);
      }
    
      // ムーブ代入
      {
        std::list<int> ls1 = { 1, 2, 3 };
        std::list<int> ls2;
    
        ls2  =  std::list<int>(ls1);
    
        assert(ls1 == ls2);
      }
    
      // 初期化子リストからのコピー代入
      {
        std::list<int> ls1;
        ls1 = { 1, 2, 3 };
    
        // 事後条件の検証
        std::initializer_list<int> init = { 1, 2, 3 };
        std::list<int> ls2;
        ls2 = init;
    
        assert(std::equal(ls2.begin(), ls2.end(), init.begin()));
      }
    }
    

    出力

    参照