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())); } }
出力