insert関数の最初の引数に、挿入したいところの反復子を指定します。
その次の引数に、挿入したいデータを指定します。
では、サンプルを見てみましょう。
// deque02.cpp #include <iostream> #include <deque> using namespace std; int inputdeque(deque<int> &); int readdeque(deque<int> &); int inputback(deque<int> &); int insertdeque(deque<int> &); int main() { deque <int> de01; inputdeque(de01); readdeque(de01); inputback(de01); readdeque(de01); insertdeque(de01); readdeque(de01); return 0; } int inputdeque(deque<int> &dq) { int i; for (i = 0; i < 10; i++) dq.push_front(i); return 0; } int inputback(deque<int> &dq) { int i; for (i = 0; i < 10; i++) dq.push_back(i); return 0; } int readdeque(deque<int> &dq) { int i; cout << "読み出し開始" << endl; for (i = 0; i < (int)dq.size(); i++) cout << i + 1 << "番目 = " << dq[i] << endl; return 0; } int insertdeque(deque<int> &dq) { deque<int>::iterator p; p = dq.begin(); dq.insert(p + 3, 100); p = dq.begin(); dq.insert(p + 3, 200); return 0; }inputdeque関数は、dequeに0から9までの整数値を push_frontしています。
inputback関数は、0から9までの整数値をpush_backしています。
readdeque関数は順番に読み出しています。
さて、insertdeque関数を見てください。
dq.insert(p + 3, 100);
は、p+3の位置つまり、前から4番目の位置にに100を挿入しています。 もし、このあと続けて、
dq.insert(p + 3, 200);
を実行するとどうなるでしょうか。
本来なら、
....,200,100,....
の並び順になると思われますね。しかし、実際は
....,100,200,...
となってしまいます。
実はinsertすることにより、データの位置関係が変化します。 次にinsertする時は、反復子が何を指しているのかをしっかり指定しなくては 思い通りの結果が得られない点に注意してください。
Update Sep/28/2004 By Y.Kumei