zoukankan      html  css  js  c++  java
  • 如何使用queue? (C/C++) (STL)

    此范例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往上跳则严格禁止。

  • 相关阅读:
    第二次,营造完整的人生(上)
    御风者(二)——狼王
    我的个人博客
    FTP 协议解析
    关于 Wireshark3 中 GeoIP 的问题
    CentOS8 NextCloud 私有云存储搭建
    Windows10 临时将线程绑定至指定CPU的方法
    CentOS8 yum/dnf 配置国内源(临时)
    Cknife流量分析
    samba + OPENldap 搭建文件共享服务器
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1862811.html
Copyright © 2011-2022 走看看