std::inplace_vector<T,N>:: assign
From cppreference.net
<
cpp
|
container
|
inplace vector
|
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
)
内の要素のコピーで置き換えます。
first
または
last
が
*
this
を指すイテレータである場合、動作は未定義です。
3)
内容を
ilist
の要素で置き換えます。
| このセクションは不完全です |
目次 |
パラメータ
| count | - | コンテナの新しいサイズ |
| value | - | コンテナの要素を初期化するための値 |
| first, last | - | コピーする要素のソース範囲を定義するイテレータのペア range |
| ilist | - | std::initializer_list から値をコピーする |
計算量
1)
線形で
count
に比例します。
2)
first
と
last
の間の距離に対して線形。
3)
線形で
ilist.
size
(
)
に比例します。
例外
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
関連項目
|
コンテナに値の範囲を割り当てる
(公開メンバ関数) |
|
|
コンテナに値を割り当てる
(公開メンバ関数) |