第85章 dequeコンテナをもう少し使う


前章では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する時は、反復子が何を指しているのかをしっかり指定しなくては 思い通りの結果が得られない点に注意してください。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Sep/28/2004 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。