2018年02月12日
《その288》 両端キュー dequr<>
両端キュー dequr<>
C++ が提供するコンテナライブラリには、vector<> 以外にもいろいろあります。
今回は、その中の dequr<> について、ごく簡単にですが、チェックしてみます。
deque は vector と同じ動的配列クラスで、オブジェクトの外に記憶域を確保しますが、配列要素データを連続したアドレスに収納するとは限らない点が、vector とは異なります。
先頭側からも末尾側からも要素へのアクセスが容易にできるので、両端キューと呼ばれていますが、特に、先頭側からのアクセスが多い処理に使われることが多いようです。
操作性やメンバ関数は、vector によく似ています。
下記のプログラムを順にみていきます。
◆最初に、
deque
で、要素数 2、各値が 5 の dequeオブジェクト a を生成します。
◆次に、先頭側から、
push_front関数
で値を挿入し、続いて末尾側から、
push_back関数
で値を挿入しています。
◆コピーコンストラクタで dequeオブジェクト b を生成します。
deque
◆オブジェクト b の先頭要素を、
pop_front関数
で削除して、最後に
swap関数
で、a, b の要素を交換しています。
以下はプログラムです。
#include <deque>
#include <iostream>
using namespace std;
void disp(deque<int>& x) {
for (unsigned i = 0; i < x.size(); i++)
cout << x[i] << ' ';
cout << '\n';
}
int main() {
cout << "deque<int> a(2, 5);\n";
deque<int> a(2, 5);
cout << "a … "; disp(a);
cout << '\n';
cout << "先頭に、4, 3, 2, 1 "
"の順に値を挿入\n";
for (unsigned i = 4; i > 0; i--)
a.push_front(i);
cout << "末尾に、6, 7, 8, 9 "
"の順に値を挿入\n\n";
for (unsigned i = 6; i < 10; i++)
a.push_back(i);
cout << "a … "; disp(a);
cout << '\n';
cout << "deque<int> b(a);\n";
deque<int> b(a);
cout << "b … "; disp(b);
cout << '\n';
cout << "b の先頭要素を 5回削除\n";
for (unsigned i = 0; i< 5; i++)
b.pop_front();
cout << "b … "; disp(b);
cout << '\n';
cout << "b.swap(a);";
b.swap(a); cout << '\n';
cout << "a … "; disp(a);
cout << "b … "; disp(b);
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7309020
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック