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
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌
関連項目
| 名前 | 説明 |
|---|---|
emplace |
要素を直接構築で挿入する |
insert_range |
Rangeの要素を挿入する |
参照
- P0447R28 Introduction of
std::hiveto the standard library- C++26で
hiveが追加された
- C++26で