まず読み方に困りそうですが「デック」と読みます。dequeは、vector(動的配列) とよく似ています。dequeの場合は、動的配列の前後に対して要素の挿入や削除が行えます。前にも後ろにも挿入動作が 行えるため、内部の実装がvectorより複雑になっていますが、使い方はほぼvectorと同じです。
基本的にvectorと同じように扱えるので、説明は簡単に済ませます。詳細はvectorを解説した第2章 を参照して下さい。
#include <deque>
#include <iostream>
using namespace std;
// プロトタイプ宣言
void print(const deque<int>& deq);
int main()
{
deque<int> deq; // int型の両端待ち行列
// 要素を追加
deq.push_back( 10 ); // 末尾に10
deq.push_back( 20 ); // 末尾に20
deq.push_front( 30 ); // 先頭に30
print( deq ); // 結果出力
// 要素を削除
deq.pop_back();
print( deq ); // 結果出力
// 全削除
deq.clear();
print( deq ); // 結果出力
return 0;
}
// dequeの要素を出力
void print(const deque<int>& deq)
{
if( deq.empty() )
{
// dequeが空の場合
cout << "dequeは空です";
}
else
{
// dequeが空ではない場合
for(int i = 0; i < (int)deq.size(); ++i )
{
cout << deq[i] << ' ';
}
}
cout << '\n' << endl; // 改行
} |
dequeはstdという名前空間に含まれています。dequeのデフォルトコンストラクタは、空の両端待ち行列を 生成します。デストラクタで適切に解体処理を行います。
要素を追加するには、push_back()、push_front()、 insert()のいずれかを使用します。また、要素を削除するには、 pop_back()、pop_front()、 erase()、clear()のいずれかを使用します。 この辺りは完全にvectorと同じです。例によって、insert()とerase()はイテレータを使います。clear()は要素 全てを削除します。
size()を使うとdequeに含まれている要素の個数が取得できます。空かどう かはempty()で判定します。
vectorと同じく、[]演算子を使って要素にアクセスできます。push_front()によって先頭に要素が追加できる ため、0番目の位置が変化する可能性があることに注意して下さい。