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

履歴 編集

function
<forward_list>

std::forward_list::operator=(C++11)

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

概要

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

効果

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

戻り値

*this

事後条件

  • (1) : *this == x
  • (2) : *thisは元々のxと等値となる
  • (3) : *this == x

計算量

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

#include <cassert>
#include <forward_list>
#include <algorithm>

int main()
{
  // コピー代入
  {
    std::forward_list<int> ls1 = {1, 2, 3};
    std::forward_list<int> ls2;

    ls2 = ls1;

    assert(ls1 == ls2);
  }

  // ムーブ代入
  {
    std::forward_list<int> ls1 = {1, 2, 3};
    std::forward_list<int> ls2;

    ls2 = std::forward_list<int>(ls1);

    assert(ls1 == ls2);
  }

  // 初期化子リストからのコピー代入
  {
    std::forward_list<int> ls1;
    ls1 = {1, 2, 3};

    // 事後条件の検証:
    std::initializer_list<int> init = {1, 2, 3};
    std::forward_list<int> ls2;
    ls2 = init;

    assert(std::equal(ls2.begin(), ls2.end(), init.begin()));
  }
}

出力

バージョン

言語

  • C++11

処理系

  • Clang: ??
  • GCC: 4.7.0
  • ICC: ??
  • Visual C++: 2010, 2012, 2013, 2015, 2017
    • (3) initializer_listのオーバーロードは2013から。

参照