最終更新日時: 2026年03月30日 18時31分10秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<inplace_vector>

# std::inplace_vector::assign(C++26)

    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 ❌

## 参照

- P0843R14 `inplace_vector`