Namespaces
Variants

std::inplace_vector<T,N>:: assign

From cppreference.net

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

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

1) 内容を count 個の value のコピーで置き換えます。
2) 内容を範囲 [ first , last ) 内の要素のコピーで置き換えます。
このオーバーロードは、 InputIt LegacyInputIterator の要件を満たす場合にのみ、オーバーロード解決に参加します。
first または last * this を指すイテレータである場合、動作は未定義です。
3) 内容を ilist の要素で置き換えます。

目次

パラメータ

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

計算量

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

例外

1) std::bad_alloc 、もし count > capacity ( ) の場合。
2) std::bad_alloc 、もし ranges:: distance ( first, last ) > capacity ( ) の場合。
3) std::bad_alloc 、もし ilist. size ( ) > capacity ( ) の場合。
1-3) 挿入された要素の初期化によってスローされるあらゆる例外。

以下のコードは assign を使用して、いくつかの文字を std:: inplace_vector < char , 5 > に追加します:

#include <inplace_vector>
#include <iterator>
#include <new>
#include <print>
int main()
{
    std::inplace_vector<char, 5> chars;
    chars.assign(4, 'a'); // オーバーロード (1)
    std::println("{}", chars);
    const char extra[3]{'a', 'b', 'c'};
    chars.assign(std::cbegin(extra), std::cend(extra)); // オーバーロード (2)
    std::println("{}", chars);
    chars.assign({'C', '+', '+', '2', '6'}); // オーバーロード (3)
    std::println("{}", chars);
    try
    {
        chars.assign(8, 'x'); // スロー: count > chars.capacity()
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #1"); }
    try
    {
        const char bad[8]{'?'}; // ranges::distance(bad) > chars.capacity()
        chars.assign(std::cbegin(bad), std::cend(bad)); // スロー
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #2"); }
    try
    {
        const auto l = {'1', '2', '3', '4', '5', '6'};
        chars.assign(l); // スロー: l.size() > chars.capacity()
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #3"); }
}

出力:

['a', 'a', 'a', 'a']
['a', 'b', 'c']
['C', '+', '+', '2', '6']
std::bad_alloc #1
std::bad_alloc #2
std::bad_alloc #3

関連項目

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