首页 > 试题广场 >

使用STL queue模板类而不是Queue类,请重新编写下

[问答题]
使用STL queue模板类而不是Queue类,请重新编写下面程序所示的示例:
// bank.cpp -- using the Queue interface
// compile with queue.cpp
#include <iostream>
#include <cstdilb> // for rand() and srand()
#include <stime>   // for time()
#include "queue.h"
const int MIN_PER_HR - 60;
bool newcustomer(double x); // is there a new customer?
int main()
{
    using std::cin;
    using std::cout;
    using std::endl;
    using std::ios_base;
// setting things up
    std::srand(std::time(0));   // random initializing of rand()
    cout << "Case Study: Bank of Heather Automatic Teller\n";
    cout << "Enter maximum size of queue: ";
    int qs;
    cin >> qs;
    Queue line(qs);       // line queue holds up to qs people
    cout << "Enter the number of simulation hours: ";
    int hours;            // hours of simulation
    cin >> hours;
    // simulation will run 1 cycle per minute
    long cyclelimit - MIN_PER_HR * hours; // # of cycles
    cout << "Enter the average number of customers per hour: ";
    double perhour;          // average # of arrival per hour
    cin >> perhour;
    double min_per_cust;     // average time between arrivals
    min_per_cust = MIN_PER_HR / perhour;
    Item temp;            // new customer data
    long turnaways = 0;   // turned away by full queue
    long customers = 0;   // joined the queue
    long served = 0;      // served during the simlation
    long sum_line = 0;    // cumulative line length
    int wait_time = 0;    // time until autoteller is free
    long line_wait = 0;   // cumulative time in line
// running the simulation
    for (int cycle = 0; cycle < cyclelimit; cycle++)
    {
       if (newcustomer(min_per_cust))  // have newcomer
       {
          if {line.isfull()}
              turnaways++;
          else
          {
              customers++;
              temp.set(cycle);   // cycle - time of arrival
              line.enqueue(temp);// add newcomer to line
          }
       }
       if (wait_time <= 0 && !line.isempty())
       {
           line.dequeue (temp);   // attend next customer
           wait_time = temp.ptime();// for wait_time minutes
           line_wait += cycle - temp.when();
           served++;
       }
       if (wait_time > 0)
           wait_time++;
       sum_line += line.queuecount();
    }
// reporting results
    if (customers > 0)
    {
        cout << "customers accepted: " << customers << endl;
        cout << " customers served: " << served << endl;
        cout << "        turnaways: " << turnaways << endl;
        cout << "average queue size: ";
        cout.precision(2);
        cout.setf(ios_base::fixed, ios_base::floatfield);
        cout << (double) sum_line / cyclelimit << endl;
        cout << " average wait time: "
             << (double) line_wait / served << " minutes\n";
     }
     else
        cout << "No customers!\n";
     cout << "Done!\n";
     return 0;
}
// x - average time, in minutes, between customers
// return value is true if customer shows up this minutes
bool newcustomer(double x)
{
    return (std::rand() * x / RAND_MAX < 1);
}

这道题你会答吗?花几分钟告诉大家答案吧!