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

本文通过一个具体的C++代码示例,演示了如何使用STL中的队列(queue)容器进行数据的添加和移除操作。展示了使用push()添加元素,front()获取队首元素,以及pop()移除队首元素的方法。

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

 1ExpandedBlockStart.gifContractedBlock.gif/**//* 
 2InBlock.gif(C) OOMusou 2006 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : Queue.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0
 6InBlock.gifDescription : Demo how to use queue
 7InBlock.gifRelease     : 11/25/2006
 8ExpandedBlockEnd.gif*/

 9None.gif#include <conio.h> // for _getch()
10None.gif#include <queue>   // for std::queue
11None.gif#include <iostream>
12None.gif
13None.gifstd::queue<char> charQueue;
14None.gif
15ExpandedBlockStart.gifContractedBlock.gifint main() dot.gif{
16InBlock.gif  char c;
17ExpandedSubBlockStart.gifContractedSubBlock.gif  while(c = _getch()) dot.gif{
18ExpandedSubBlockStart.gifContractedSubBlock.gif    switch(c) dot.gif{
19InBlock.gif      case '1':
20InBlock.gif      case '2':
21InBlock.gif      case '3':
22InBlock.gif      case '4':
23InBlock.gif        charQueue.push(c);
24InBlock.gif        break;
25InBlock.gif      case 'q':
26InBlock.gif        goto stop;
27InBlock.gif        break;
28ExpandedSubBlockEnd.gif    }

29ExpandedSubBlockEnd.gif  }

30InBlock.gif
31InBlock.gif  stop:
32ExpandedSubBlockStart.gifContractedSubBlock.gif  while(!charQueue.empty()) dot.gif{
33InBlock.gif    std::cout << charQueue.front() << std::endl;
34InBlock.gif    charQueue.pop();
35ExpandedSubBlockEnd.gif  }

36InBlock.gif
37InBlock.gif  return 0;
38ExpandedBlockEnd.gif}

在以前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/碁峰出版社
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值