(原創) 如何使用queue? (C/C++) (STL)

时间:2022-09-01 18:28:15

此范例demo如何使用STL的queue container,要将数据加进queue时,只要用q.push(item)即可,但要取出数据时,并不是用q.pop(),而是用q.front()取出最前面的数据,q.pop()则是将最前面的数据取出queue,其回传值为void。

 1 (原創) 如何使用queue? (C/C++) (STL)(原創) 如何使用queue? (C/C++) (STL) /* 
 2(原創) 如何使用queue? (C/C++) (STL)(C) OOMusou 2006 http://oomusou.cnblogs.com
 3(原創) 如何使用queue? (C/C++) (STL)
 4(原創) 如何使用queue? (C/C++) (STL)Filename    : Queue.cpp
 5(原創) 如何使用queue? (C/C++) (STL)Compiler    : Visual C++ 8.0
 6(原創) 如何使用queue? (C/C++) (STL)Description : Demo how to use queue
 7(原創) 如何使用queue? (C/C++) (STL)Release     : 11/25/2006
 8(原創) 如何使用queue? (C/C++) (STL)*/

 9 (原創) 如何使用queue? (C/C++) (STL)#include  < conio.h >   //  for _getch()
10 (原創) 如何使用queue? (C/C++) (STL) #include  < queue >     //  for std::queue
11 (原創) 如何使用queue? (C/C++) (STL) #include  < iostream >
12 (原創) 如何使用queue? (C/C++) (STL)
13 (原創) 如何使用queue? (C/C++) (STL)std::queue < char >  charQueue;
14 (原創) 如何使用queue? (C/C++) (STL)
15 (原創) 如何使用queue? (C/C++) (STL)(原創) 如何使用queue? (C/C++) (STL) int  main()  {
16(原創) 如何使用queue? (C/C++) (STL)  char c;
17(原創) 如何使用queue? (C/C++) (STL)(原創) 如何使用queue? (C/C++) (STL)  while(c = _getch()) {
18(原創) 如何使用queue? (C/C++) (STL)(原創) 如何使用queue? (C/C++) (STL)    switch(c) {
19(原創) 如何使用queue? (C/C++) (STL)      case '1':
20(原創) 如何使用queue? (C/C++) (STL)      case '2':
21(原創) 如何使用queue? (C/C++) (STL)      case '3':
22(原創) 如何使用queue? (C/C++) (STL)      case '4':
23(原創) 如何使用queue? (C/C++) (STL)        charQueue.push(c);
24(原創) 如何使用queue? (C/C++) (STL)        break;
25(原創) 如何使用queue? (C/C++) (STL)      case 'q':
26(原創) 如何使用queue? (C/C++) (STL)        goto stop;
27(原創) 如何使用queue? (C/C++) (STL)        break;
28(原創) 如何使用queue? (C/C++) (STL)    }

29(原創) 如何使用queue? (C/C++) (STL)  }

30(原創) 如何使用queue? (C/C++) (STL)
31(原創) 如何使用queue? (C/C++) (STL)  stop:
32(原創) 如何使用queue? (C/C++) (STL)(原創) 如何使用queue? (C/C++) (STL)  while(!charQueue.empty()) {
33(原創) 如何使用queue? (C/C++) (STL)    std::cout << charQueue.front() << std::endl;
34(原創) 如何使用queue? (C/C++) (STL)    charQueue.pop();
35(原創) 如何使用queue? (C/C++) (STL)  }

36(原創) 如何使用queue? (C/C++) (STL)
37(原創) 如何使用queue? (C/C++) (STL)  return 0;
38(原創) 如何使用queue? (C/C++) (STL)}

在以前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往上跳则严格禁止。

Reference
C++标准链接库 中文版 P.444 ~ P.447, Nicolai M. Josuttis 着,侯捷/孟岩 译, Addison Wiseley/碁峰出版社