前章ではdequeコンテナの基本的な使い方をやりました。
今回はinsertメンバ関数の使い方を含めた基本的使い方をやります。
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