c ++链表模板和节点

时间:2014-12-11 14:26:19

标签: c++ templates nodes

我目前正在尝试为我的列表类创建一个模板 - 它应该能够创建一个继承Employee(Manager和Staff)的Employee类的链接列表。

我对如何初始化列表感到困惑,就像我一样,它要求数据类型。

以下是我的代码的一些内容:

template <class DataType>
struct Node
{
    DataType data;
    Node<DataType> *next;
};



template <class DataType>
class List
{
public:
    List();
    List(const List<DataType> & aplist);
    ~List();

    bool search(const DataType & element);  

    Node<DataType> first();
private:
    Node<DataType>* head;
    Node<DataType>* current;              
};

template <class DataType>
List<DataType>::List() 
{
    head = NULL;
}

template <class DataType>
List<DataType>::List(const List<DataType> & aplist)
{
    deepCopy(aplist);
}
... etc

在创建列表方面我有点困惑;以前当我在.header文件中使用我的链表时,我使用了List myList;所以现在我尝试了这个

List<> myList;

它需要一种数据类型。所以我尝试了List&lt;数据类型&GT;我的列表;并且它不喜欢DataType,即使它在我的模板中声明了吗?我也尝试过Node并得到错误,说明类模板的参数列表&#34; Node&#34;不见了。

我想知道是否有人可以解释如何启用我的链表(myList)初始化然后允许输入3个不同的类Employee(基类),(Managerand Staff继承Employee)。

干杯

2 个答案:

答案 0 :(得分:1)

我建议你尝试使用像int这样的实现:

List<int> myList;

如果可行,则使用模板的链接列表的基本实现是正确的。现在,您可以开始创建自己的数据类型,如员工类(如果您还没有),并使用该数据类型。它应该以完全相同的方式工作。

请注意名称&#34; DataType&#34;在您的类模板中实际上不是数据类型,而是实际数据类型的占位符,如int,Employee,...

答案 1 :(得分:1)

您需要提供希望列表保留的特定数据类型。因此,如果它只保留Employee实例,那么这可能是

List<Employee> myList

但是如果你想要多态行为,那么你需要节点存储指针; e.g。

List<Employee*> myList

或者,取决于您的资源管理需求

List<std::unique_ptr<Employee>> myList