最終更新日時:
が更新

履歴 編集

function
<list>

std::list::operator=

list& operator=(const list& x);         // (1)
list& operator=(list&& x);              // (2) C++11
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()));
  }
}

出力

参照