最終更新日時:
が更新

履歴 編集

function
<vector>

std::vector::operator=

vector& operator=(const vector& x);     // (1) C++03
vector& operator=(vector&& x);          // (2) C++11
vector& operator=(initializer_list<T>); // (3) C++11

概要

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

要件

効果

  • (1) : 同じテンプレートパラメータを持つvectorクラスのオブジェクトをコピー代入する。*thisの全ての要素が解放され、xの全ての要素が*thisにコピーされる。
  • (2) : 同じテンプレートパラメータを持つvectorクラスのオブジェクトをムーブ代入する。*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 <vector>
#include <algorithm>
#include <utility>

int main()
{
  // コピー代入
  {
    std::vector<int> v1 = {1, 2, 3};
    std::vector<int> v2;

    v2 = v1;

    assert(v1 == v2);
  }

  // ムーブ代入
  {
    std::vector<int> v1 = {1, 2, 3};
    std::vector<int> v2;

    std::vector<int> copied_v1 = v1;
    v2 = std::move(v1);

    assert(copied_v1 == v2);
  }

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

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

    assert(v2.size() == init.size());
    assert(std::equal(v2.begin(), v2.end(), init.begin()));
  }
}

出力

参照