今回も、QUEUEクラスを使った簡単なサンプルを作ってみます。
前章でも書いたようにこのクラスには、データを最後に追加して、最初からしか取得できません。
2番目、3番目の要素を取得するには先頭データから、1つずつ削除していくしかありません。
今回は、文字列をどんどん格納して、これを先頭から読み出してみるプログラムを作ります。
読み出す前であれば、何回もデータを格納できます。
読み出した後では、最初からデータを入れることになります。
では、サンプルを見てみましょう。
// queue02.cpp
#include <iostream>
#include <queue>
#include <string>
#include <conio.h>
using namespace std;
int menu();
int myinput();
int myread();
queue<string> qu;
int main()
{
menu();
return 0;
}
int menu()
{
string no;
int nNo;
while (1) {
cout << "*************************" << endl;
cout << "1.データの格納" << endl;
cout << "2.データの読み出し" << endl;
cout << "0.終了" << endl;
cout << "*************************" << endl;
cout << "選択番号----";
cin >> no;
nNo = atoi(no.c_str());
switch (nNo) {
case 0:
return 0;
case 1:
myinput();
break;
case 2:
myread();
break;
default:
cout << "番号が不正です" << endl;
continue;
}
}
return 0;
}
int myinput()
{
string data;
while (1) {
cout << "文字列(eで終了)---";
cin >> data;
if (data == "e")
break;
qu.push(data);
}
return 0;
}
int myread()
{
int i, j;
j = (int)qu.size();
if (j == 0) {
cout << "読み出すデータがありません" << endl;
return -1;
}
cout << "読み出すとデータは無くなります" << endl;
for (i = 0; i < j; i++) {
cout << qu.front() << endl;
qu.pop();
}
cout << "何かキーを打つとメニューに戻ります" << endl;
getch();
return 0;
}
あまり意味のないプログラムです。main関数からはmenu関数が呼ばれているのみです。 menu関数では、ユーザーの指定した番号に従ってmyinputまたは、myread関数を 呼んでいます。
いろいろ改良して遊んでみてください。
Update Jun/21/2004 By Y.Kumei