Namespaces
Variants

std::vector<T,Allocator>:: assign

From cppreference.net

void assign ( size_type count, const T & value ) ;
(1) (C++20以降 constexpr)
template < class InputIt >
void assign ( InputIt first, InputIt last ) ;
(2) (C++20以降 constexpr)
void assign ( std:: initializer_list < T > ilist ) ;
(3) (C++11以降)
(C++20以降 constexpr)

コンテナの内容を置き換えます。

1) 内容を count 個の value のコピーで置き換えます。
2) 内容を範囲 [ first , last ) 内の要素のコピーで置き換えます。

このオーバーロードは、 InputIt が整数型の場合、オーバーロード (1) と同じ効果を持ちます。

(C++11以前)

このオーバーロードは、 InputIt LegacyInputIterator の要件を満たす場合にのみ、オーバーロード解決に参加します。

(C++11以降)
first または last * this を指すイテレータである場合、動作は未定義です。
3) 内容を ilist の要素で置き換えます。

すべてのイテレータ( end() イテレータを含む)および要素へのすべての参照が無効化されます。

目次

パラメータ

count - コンテナの新しいサイズ
value - コンテナの要素を初期化する値
first, last - コピーする要素のソース範囲を定義するイテレータのペア range
ilist - std::initializer_list から値をコピーする

計算量

1) 線形で count のオーダー。
2) first last の間の距離に対して線形。
3) 線形で ilist. size ( ) に比例します。

以下のコードは assign を使用して複数の文字を std:: vector < char > に追加します:

#include <vector>
#include <iostream>
#include <string>
int main()
{
    std::vector<char> characters;
    auto print_vector = [&]()
    {
        for (char c : characters)
            std::cout << c << ' ';
        std::cout << '\n';
    };
    characters.assign(5, 'a');
    print_vector();
    const std::string extra(6, 'b');
    characters.assign(extra.begin(), extra.end());
    print_vector();
    characters.assign({'C', '+', '+', '1', '1'});
    print_vector();
}

出力:

a a a a a
b b b b b b
C + + 1 1

欠陥報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2209 C++98 置換操作は既存の全要素の削除に続いて指定された要素の挿入として実装されることが要求されていた 要求を
削除

関連項目

値の範囲をコンテナに割り当てる
(公開メンバ関数)
値をコンテナに割り当てる
(公開メンバ関数)