最終更新日時:
が更新

履歴 編集

function
<deque>

std::deque::insert

iterator insert(iterator position, const T& x);                     // (1) C++03
iterator insert(const_iterator position, const T& x);               // (1) C++11

iterator insert(const_iterator position, T&& y);                    // (2) C++11

void insert(iterator position,
            size_type n, const T& x);                               // (3) C++03
iterator insert(const_iterator position,
                size_type n, const T& x);                           // (3) C++11

template <class InputIterator>
void insert(iterator position,
            InputIterator first, InputIterator last);               // (4) C++11
template <class InputIterator>
iterator insert(const_iterator position,
                InputIterator first, InputIterator last);           // (4) C++11

iterator insert(const_iterator position, initializer_list<T> init); // (5) C++11

概要

任意の位置に要素を挿入する。

この関数は、positionで指定した場所の前に新しい要素を挿入することにより、dequeコンテナを拡張する。

これは挿入される要素の分だけコンテナのサイズを増加させ、それより前に取得された全てのイテレータを無効化する。しかし、先頭または終端への挿入の場合は、参照は有効なままとなる。

二重終端キューは、シーケンスの終端または先頭への挿入(もしくは削除)が効率的なパフォーマンスとなるよう、設計されている。他の場所への挿入は通常、listコンテナよりも効率の面で劣る。

追加される要素の数、及びそれぞれの初期値は引数によって決定づけられる。

引数

  • position新しい要素を挿入するコンテナ内の場所。iteratorはメンバ型であり、ランダムアクセスイテレータとして定義される。
  • x挿入される要素の初期化に使われる値。Tはひとつめのテンプレートパラメータ(コンテナに格納される要素の型)である。
  • y直接挿入される値。Tはひとつめのテンプレートパラメータ(コンテナに格納される要素の型)である。
  • n挿入する要素の数。それぞれの要素は x の値によって初期化される。メンバ型size_typeは符号なし整数型である。
  • first, last要素の範囲を指定する。範囲 [first, last) の中にある要素のコピーが位置positionに挿入される。firstlastの間の範囲は、firstで指定された要素を含むが、lastで指定された要素を含まない点に注意。テンプレート型はどんな入力イテレータでも構わない。

戻り値

  • C++03まで一番上のバージョンがのみ、新しい要素が挿入された場所を指すイテレータを返す。
  • C++11以降新しい要素が挿入された場所を示すイテレータ。

計算量

挿入する要素の数に対して線形時間(コピー・ムーブコンストラクタの呼び出し)。加えて、positiondeque終端との間の要素の数に対して、ライブラリの実装依存で線形時間で増加する。

備考

  • 条件付きで、例外が発生した場合に副作用が発生しない保証がある。
    • C++03: 要素型Tのコピーコンストラクタ、代入演算子以外で例外が発生した場合、副作用は発生しない。
    • C++11: 要素型Tのコピーコンストラクタ、ムーブコンストラクタ、代入演算子、ムーブ代入演算子以外で例外が発生した場合、副作用は発生しない。(ムーブについて規定が追加された。)
    • C++14: 単一要素を終端あるいは先頭に追加する際に例外が発生した場合、副作用は発生しない。それ以外はC++11と同様。

#include <iostream>
#include <deque>

int main()
{
  std::deque<int> c = {2, 3, 4};

  // 先頭に1を挿入
  c.insert(c.begin(), 1);

  for (int x : c) {
    std::cout << x << std::endl;
  }
}

出力

1
2
3
4

関連項目

名前 説明
emplace 任意の位置に要素を直接構築で挿入する

参照

参照