【问题标题】:Queue wrapper with list带有列表的队列包装器
【发布时间】:2018-03-25 02:09:56
【问题描述】:

我有一个关于家庭作业的问题。我无法让我的 enqueue()dequeue() 函数工作。 visual Studio 说该类没有名称的成员。我已经包含了 t 指令和我的所有代码。

我也不确定代码中的其他所有内容是否正确。

说明 编写如下定义的模板队列类: 私有数据成员:一个 STL 列表 公共成员函数: -空的 -尺寸 -入队 -双端队列 -正面 -背部 然后写一个驱动来测试上面的队列类。

我不知道标题是否正确,但这是我能想到的。

//Header File
#include <iostream>
#include <list>
#include <queue>
using namespace std;

template<typename queueElement>
class Queue
{
public:
    bool empty() const;
    queueElement size();
    void enqueue(const queueElement & value);
    void dequeue();
    queueElement front();
    queueElement back();
private:
    list <queueElement> aList;
};

template<typename queueElement>
inline bool Queue<queueElement>::empty() const
{
    return aList.empty();
}

template<typename queueElement>
queueElement Queue<queueElement>::size()
{
    return size;
}

template<typename queueElement>
void Queue<queueElement>::enqueue(const queueElement & value)
{
    aList.push_back(value);
}

template<typename queueElement>
void Queue<queueElement>::dequeue()
{
    if (!aList.empty())
    {
        aList.pop_front();
    }
    else
    {
    cout << "Queue is Empty!" << endl;
    }
}

template<typename queueElement>
queueElement Queue<queueElement>::front()
{
    return aList.front();
}

template<typename queueElement>
queueElement Queue<queueElement>::back()
{
    return aList.back();
}

这是我要测试的驱动程序,它是显示错误的地方。

//Driver
#include <iostream>
#include <queue>
#include <list>
#include "Header.h"
using namespace std;
int main()
{
    list<int> intList;
    for (int i = 0; i < 20; i++)
    {
        intList.enqueue(i); //problem with enqueue
    }
    cout << "Size: " << intList.size() << endl;
    intList.dequeue(); //problem with dequeue
    intList.dequeue(); //problem with dequeue
    cout << "Size after dequeue: " << intList.size() << endl;
    cout << "Front: " << intList.front() << endl;
    cout << "Back: " << intList.back() << endl;

    system("pause");
    return 0;
}

【问题讨论】:

    标签: c++ list templates stl queue


    【解决方案1】:

    两个拼写错误,您可能打算将intList 实例化为Queue,因为enqueuedequeue 等......是Queue 的成员。

    Queue<int> intList;
    

    另一个是因为size()应该返回aList.size()

    template<typename queueElement>
    queueElement Queue<queueElement>::size()
    {
        return aList.size();
    }
    

    【讨论】:

    • 非常感谢。这两个更改修复了它并且运行良好。
    【解决方案2】:

    我有一个关于家庭作业的问题。我无法让我的入队或出队函数工作。

    请定义“问题”并解释“我无法让我的入队或出队函数工作”、“入队问题”和“出队问题”是什么意思

    无论如何,我希望你给我们展示size()方法

    template<typename queueElement>
    queueElement Queue<queueElement>::size()
    {
        return size;
    }
    

    是转录错误。

    如果你只返回size,我想你返回的是size()方法本身的地址,转换为queueElement类型(在你的例子中转换为int)。

    我想size() 应该返回aList.size(),一个无符号整数(我想是std::size_t),而不是queueElement。而且,也许,可以是const 方法。

    某事

    template<typename queueElement>
    std::size_t Queue<queueElement>::size() const
    {
        return aList.size();
    }
    

    【讨论】:

    • 当我说我有问题时,我只是意味着 enqueue 和 dequeue 函数使用确切的措辞显示错误 class"std::list>" 没有成员“入队”。
    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多