最終更新日時:
が更新

履歴 編集

function
<hive>

std::hive::insert(C++26)

iterator insert(const T& x);                    // (1) C++26
iterator insert(T&& x);                         // (2) C++26

iterator insert(const_iterator hint,
                const T& x);                    // (3) C++26
iterator insert(const_iterator hint,
                T&& x);                         // (4) C++26

void insert(initializer_list<T> il);           // (5) C++26

void insert(size_type n, const T& x);          // (6) C++26

template <class InputIterator>
void insert(InputIterator first,
            InputIterator last);                // (7) C++26

概要

新たな要素を挿入する。

挿入位置はコンテナが決定するため、挿入する位置を指定することはできない(順序は未規定である)。

  • (1), (2) : 新たな要素をひとつ挿入する
  • (3), (4) : hintを無視して、新たな要素をひとつ挿入する
  • (5) : initializer_listの全ての要素を挿入する
  • (6) : 新たな要素xのコピーをn個挿入する
  • (7) : イテレータ範囲[first, last)の要素を挿入する

テンプレートパラメータ制約

  • (5), (7) : 型Tが、*ranges::begin(rg)からhiveコンテナへのEmplaceInsertableであること。ここでrgは挿入する要素のRangeである
  • (6) : 型Tが、hiveコンテナへのCopyInsertableであること

効果

  • (1), (2) : return emplace(std::forward<decltype(x)>(x));と等価である
  • (3), (4) : hint引数を無視し、(1), (2)と等価な処理を行う
  • (5) : initializer_listの各要素のコピーを挿入する。各イテレータはちょうど1回だけ間接参照される
  • (6) : xのコピーをn個挿入する
  • (7) : insert_range(ranges::subrange(first, last))と等価である

戻り値

  • (1), (2), (3), (4) : 新たに挿入された要素を指すイテレータ
  • (5), (6), (7) : なし

計算量

  • (1), (2), (3), (4) : 定数時間。型Tのオブジェクトがちょうど1個構築される
  • (5), (7) : 挿入する要素数に比例して線形時間。挿入する各要素に対して、型Tのオブジェクトがちょうど1個構築される
  • (6) : nに比例して線形時間。挿入する各要素に対して、型Tのオブジェクトがちょうど1個構築される

備考

要素が挿入された場合、終端イテレータ(past-the-end iterator)は無効になる。削除されなかった既存要素へのポインタ・参照・イテレータは無効にならない。

#include <hive>
#include <print>
#include <vector>

int main()
{
  std::hive<int> h;

  // ひとつの要素を挿入する
  h.insert(1);

  // 初期化子リストの要素を挿入する
  h.insert({2, 3});

  // 値のコピーを複数個挿入する
  h.insert(2u, 4);

  // イテレータ範囲の要素を挿入する
  const std::vector<int> v = {5, 6};
  h.insert(v.begin(), v.end());

  for (int x : h) {
    std::print("{} ", x);
  }
  std::println("");
  std::println("size = {}", h.size());
}

出力例

1 2 3 4 4 5 6 
size = 7

バージョン

言語

  • C++26

処理系

関連項目

名前 説明
emplace 要素を直接構築で挿入する
insert_range Rangeの要素を挿入する

参照