template <class InputIterator>
constexpr void assign(InputIterator first, InputIterator last); // (1) C++26
constexpr void assign(size_type n, const T& u); // (2) C++26
constexpr void assign(initializer_list<T> il); // (3) C++26
概要
コンテナの再代入。
- (1) : イテレータ範囲
[first, last)の要素で既存の要素を置き換える。 - (2) :
n個のuのコピーで既存の要素を置き換える。 - (3) : 初期化子リスト
ilの要素で既存の要素を置き換える。
効果
- (1) :
*thisの全要素を破棄し、イテレータ範囲[first, last)の要素で置き換える。 - (2) :
*thisの全要素を破棄し、n個のuのコピーで置き換える。 - (3) :
*thisの全要素を破棄し、ilの要素で置き換える。
例外
- (1) :
distance(first, last) > Nの場合、std::bad_alloc例外を送出する。 - (2) :
n > Nの場合、std::bad_alloc例外を送出する。 - (3) :
il.size() > Nの場合、std::bad_alloc例外を送出する。
戻り値
なし
例
#include <print>
#include <inplace_vector>
int main()
{
std::inplace_vector<int, 10> iv = {1, 2, 3};
// (1) イテレータ範囲で再代入
int arr[] = {10, 20, 30, 40};
iv.assign(std::begin(arr), std::end(arr));
for (int x : iv) std::print("{} ", x);
std::println("");
// (2) n個の値で再代入
iv.assign(3, 99);
for (int x : iv) std::print("{} ", x);
std::println("");
// (3) 初期化子リストで再代入
iv.assign({5, 6, 7});
for (int x : iv) std::print("{} ", x);
std::println("");
}
出力
10 20 30 40
99 99 99
5 6 7
バージョン
言語
- C++26
処理系
- Clang: 23 ✅
- GCC: 16 ✅
- Visual C++: 2026 Update 2 ❌