名前空間
変種
操作

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

From cppreference.com
 
 
 
 
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) contents を count 個の value で置き換えます。
2) contents を、範囲 [firstlast) の要素のコピーで置き換えます。
いずれかの引数が *this のイテレータである場合、動作は未定義です。このオーバーロードは、InputItLegacyInputIterator を満たす場合にのみ、オーバーロード解決に参加します。
3) contents を ilist の要素で置き換えます。

目次

[編集] パラメータ

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

[編集] 計算量

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

例外

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

[編集]

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

#include <inplace_vector>
#include <iterator>
#include <new>
#include <print>
 
int main()
{
    std::inplace_vector<char, 5> chars;
 
    chars.assign(4, 'a'); // overload (1)
    std::println("{}", chars);
 
    const char extra[3]{'a', 'b', 'c'};
    chars.assign(std::cbegin(extra), std::cend(extra)); // overload (2)
    std::println("{}", chars);
 
    chars.assign({'C', '+', '+', '2', '6'}); // overload (3)
    std::println("{}", chars);
 
    try
    {
        chars.assign(8, 'x'); // throws: 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)); // throws
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #2"); }
 
    try
    {
        const auto l = {'1', '2', '3', '4', '5', '6'};
        chars.assign(l); // throws: 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

[編集] 関連項目

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