std::vector<T,Allocator>::operator=
提供: cppreference.com
vector& operator=( const vector& other ); |
(1) | |
(2) | ||
vector& operator=( vector&& other ); |
(C++11以上) (C++17未満) |
|
vector& operator=( vector&& other ) noexcept(/* see below */); |
(C++17以上) | |
vector& operator=( std::initializer_list<T> ilist ); |
(3) | (C++11以上) |
コンテナの内容を置き換えます。
1) コピー代入演算子。 内容を
other
の内容のコピーで置き換えます。 std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value が true の場合、ターゲットのアロケータはソースのアロケータのコピーで置き換えられます。 ターゲットとソースのアロケータを比較して等しくない場合、ターゲット (*this) のアロケータがメモリを解放するための使用され、その後、要素をコピーする前に、 other
のアロケータがメモリを確保するために使用されます。 (C++11以上)2) ムーブ代入演算子。 内容をムーブセマンティクスを用いて
other
の内容で置き換えます (つまり other
のデータが other
からこのコンテナにムーブされます)。 処理後 other
は有効ですが未規定の状態になります。 std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value が true の場合、ターゲットのアロケータはソースのアロケータのコピーで置き換えられます。 false の場合、ソースとターゲットのアロケータを比較して等しくなければ、ターゲットはソースのメモリの所有権を取得することができず、必要に応じて自身のアロケータを使用して追加のメモリを確保し、個々の要素を個別にムーブ代入しなければなりません。 いずれの場合でも、元々 *this に格納されていたすべての要素は、破壊されるか、要素単位のムーブ代入によって置き換えられます。3) 内容を初期化子リスト
ilist
によって表された内容で置き換えます。目次 |
[編集] 引数
other | - | データソースとして使用される別のコンテナ |
ilist | - | データソースとして使用される初期化子リスト |
[編集] 戻り値
*this。
[編集] 計算量
1)
*this
と other
のサイズに比例。2) アロケータが比較して等しくなく、伝播しない場合、
*this
と other
のサイズに比例。 そうでなければ、 *this
のサイズに比例。3)
*this
と ilist
のサイズに比例。
例外2) noexcept 指定:
noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value || std::allocator_traits<Allocator>::is_always_equal::value) |
(C++17以上) |
[編集] ノート
コンテナのムーブ代入 (オーバーロード (2)) の後、アロケータの非互換によって要素単位のムーブ代入が強制されない限り、 other
を指す参照、ポインタ、イテレータ (終端イテレータを除く) は有効なままですが、 *this 内の要素を参照するようになります。 現行の標準ではこの保証は [container.requirements.general]/12 の包括的な文言によってなされていますが、より直接的な保証が LWG issue 2321 で検討されています。
[編集] 例
This section is incomplete Reason: no example |
[編集] 関連項目
vector を構築します (パブリックメンバ関数) | |
コンテナに値を代入します (パブリックメンバ関数) |