前章では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