此範例demo如何使用STL的queue container,要將資料加進queue時,只要用q.push(item)即可,但要取出資料時,並不是用q.pop(),而是用q.front()取出最前面的資料,q.pop()則是將最前面的資料取出queue,其回傳值為void。
1/**//*
2(C) OOMusou 2006 http://oomusou.cnblogs.com
3
4Filename : Queue.cpp
5Compiler : Visual C++ 8.0
6Description : Demo how to use queue
7Release : 11/25/2006
8*/
9#include <conio.h> // for _getch()
10#include <queue> // for std::queue
11#include <iostream>
12
13std::queue<char> charQueue;
14
15int main() {
16 char c;
17 while(c = _getch()) {
18 switch(c) {
19 case '1':
20 case '2':
21 case '3':
22 case '4':
23 charQueue.push(c);
24 break;
25 case 'q':
26 goto stop;
27 break;
28 }
29 }
30
31 stop:
32 while(!charQueue.empty()) {
33 std::cout << charQueue.front() << std::endl;
34 charQueue.pop();
35 }
36
37 return 0;
38}
在以前Turbo C時代,在<stdio.h>中有getch()可抓取輸入的char值,且不在螢幕上出現,但Visual C++已經無getch()了,取而代之的是<conio.h>的_getch(),據MSDN Library的ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vccrt/html/d3a0b744-d63c-4f71-960e-24e619dccd01.htm 所述,_getch()為ISO C++所定義的,但我在Linux的gcc並無法使用_getch()。
此範例還demo了C++獨特的switch fall through寫法,這種寫法在C#並不允許,理由是很多人因為在switch中少寫了break而造成程式錯誤,所以強制switch中一定要使用break,但C++則允許不寫break,不寫break的優點是可以多個case共用一個敘述,如19行到22行,若使用if搭配||當然可以寫出來,但程式的可讀性差很多。第26行雖然動了goto,但goto只要是往下跳則還可接受,不太影響程式閱讀,但goto往上跳則嚴格禁止。