名前空間
変種
操作

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

From cppreference.com
< cpp‎ | コンテナ‎ | vector
 
 
 
 
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) contents を count 個の value で置き換えます。
2) contents を、範囲 [firstlast) の要素のコピーで置き換えます。
引数のいずれかが *this の要素へのイテレータである場合、動作は未定義です。

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

(C++11まで)

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

(C++11以降)
3) contents を ilist の要素で置き換えます。

すべてのイテレータ(end() イテレータを含む)と、要素へのすべての参照が無効になります。

目次

[編集] パラメータ

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

[編集] 計算量

1) count に対して線形。
2) firstlast の距離に対して線形。
3) ilist.size() に対して線形。

[編集]

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

#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 置き換え操作は、次のように実装することが要求されていました。
既存のすべての要素を削除し、その後、指定された要素を挿入します。
冗長な要件が
要件

[編集] 関連項目

コンテナに値の範囲を代入する
(公開メンバ関数) [編集]
コンテナに値を代入する
(公開メンバ関数) [編集]
English 日本語 中文(简体) 中文(繁體)