【问题标题】:C++ Queue SimulationC++ 队列模拟
【发布时间】:2013-10-23 17:14:19
【问题描述】:

作为家庭作业的一部分,我应该编写一个程序来模拟杂货店环境中的队列。 full assignment 在链接页面上有说明。

当只有一个队列时,我的程序正在运行,并且根据分配描述,我正在尝试修改它以处理多个队列。但是,我在编译时遇到了一些错误。

我知道这个问题与排队的客户出队有关;我只是不确定如何修改程序以便它可以与多个队列一起使用。

非常感谢任何帮助!

错误信息:

qsim.cpp: In function 'int main()':
qsim.cpp:64: error: request for member 'empty' in 'line', which is of non-class type 'Queue [(((long unsigned int)(((long int)queuecount) - 1)) + 1u)]'
qsim.cpp:66: error: request for member 'dequeue' in 'line', which is of non-class type 'Queue [(((long unsigned int)(((long int)queuecount) - 1)) + 1u)]'

主程序
主程序包括一个名为 Queue 的类。我知道代码对此是正确的,因为它可以在不同的测试程序中完美运行。

#include <cstdlib>
#include <iostream>
#include <iomanip>
#include "queue.h"
using namespace std;

int shortest_queue(Queue q[], int queuecount)
{
    int shortest = 0;
    for (int i = 1; i < queuecount; ++i)
    {
        if(q[i].size() < q[shortest].size())
            shortest = i;
    }
    return shortest;
}

int queue_total(Queue q[], int queuecount)
{
    int custcount = 0;
    for (int i = 0; i < queuecount; ++i)
        custcount += q[i].size();
    return custcount;
}

int main()
{
    int trans_time = 0;
    int count = 0;
    int entry_time;
    int wait_sum = 0;
    int wait_time = 0;
    int seed;
    int ARV_PROB;
    int MAX_TRANS_TIME;
    int DURATION;
    int queuecount;
    int shortline;
    int temp;

    cout << "Enter these parameters of the simulation:" << endl;
    cout << " The number of queue/server pairs: ";
    cin >> queuecount;
    Queue line[queuecount];
    cout << " The probability that a customer arrives in one tick (%): ";
    cin >> ARV_PROB;
    cout << " The maximum duration of a transaction in ticks: ";
    cin >> MAX_TRANS_TIME;
    cout << " The duration of the simulation in ticks: ";
    cin >> DURATION;
    cout << "Enter a random number seed: ";
    cin >> seed;
    srand(seed);

    for (int time = 0; time < DURATION; ++time)
    {
        if ( rand() % 100 < ARV_PROB )
        {
            shortline = shortest_queue(line, queuecount);
            line[shortline].enqueue(time);
        }
        if ( trans_time == 0 )
        {
            if ( !line.empty() )
            {
                entry_time = line.dequeue();
                temp = (time - entry_time);
                if(temp > wait_time)
                    wait_time = temp;
                wait_sum += (time - entry_time);
                ++count;
                trans_time = (rand() % MAX_TRANS_TIME) + 1;
            }
        }
        else
        {
            --trans_time;
        }
        cout << setw(4) << time << setw(4) << trans_time << "  " << line << endl;
    }

    cout << count << " customers waited an average of ";
    cout << wait_sum / count << " ticks." << endl;
    cout << "The longest time a customer waited was " << wait_time << " ticks." << endl;
    cout << queue_total(line, queuecount) << " customers remain in the lines." << endl;

    return 0;
}

【问题讨论】:

  • 很可能您正试图通过来自line. 访问empty/dequeue 成员,其中应使用-&gt;

标签: c++ simulation


【解决方案1】:
Queue line[queuecount];

if ( !line.empty() )

line 不是Queue。它是一个Queues 的数组,因此您必须在要检查的特定数组元素上调用empty()

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 2011-04-27
    • 2014-12-22
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2010-12-10
    相关资源
    最近更新 更多