创建对象的链接列表

时间:2011-03-23 02:12:37

标签: c++ linked-list

我有一个类赋值(读:不使用STL),我需要创建一个有序的链接对象列表,但我不太清楚如何去做。

我使用的类包含整数和字符串成员,但它只是这些整数成员中的一个将被排序。我目前有一个功能齐全的链表模板,可以使用整数数据成功运行。

现在我的问题在于将其转换为与我的班级一起工作。在实例化此链接列表时,必须在我正在排序的类Poster之后定义<Type>,在这种情况下该类型为Poster。但是,在链表类的声明中,有class Node的声明和定义,其中包含

class Node
{
public:
    Type Element;
    Node *Next, *Previous;

    Node() : Next(NULL), Previous(NULL) {} // Default constructor
    Node (Type Data, Node *PNode = NULL) : // Non-default constructor
        Element (Data),
        Next (PNode),
        Previous (PNode) {}
};

当我声明Poster时引入LinkedList<Poster> listOfPosters的成员时,我不确定这个现有定义是如何工作的。我是否应该将Node的上述定义替换为class Poster的内容,或者将节点中的Type Element标记为{{1}的成员的一种包罗万象的容器},以便可以通过class Poster访问Poster的成员?

2 个答案:

答案 0 :(得分:1)

Node.Element成员将存储Poster的(按值)副本。无需在Node的定义中手动替换任何内容;这就是C ++模板的重点。

当您声明LinkedList<Poster>对象时,编译器将生成一个新类,并用Type替换Poster占位符的所有实例。这将在Node类中自动创建一个适当的LinkedList<Poster>类,该类表示包含Poster对象的节点。

答案 1 :(得分:1)

我猜测LinkedList类的声明看起来像

template<class Type>
class LinkedList
{ ... }

当使用链表类(主程序)的程序实例化一个LinkedList类时,如下所示

LinkedList<Poster> myLinkedList;

编译器在编译时从模板生成代码,并将所有出现的“Type”替换为“Poster”。因此,您无需更改链接列表或节点类。