Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Pair模板实现列表模板_C++_Templates - Fatal编程技术网

C++ 使用Pair模板实现列表模板

C++ 使用Pair模板实现列表模板,c++,templates,C++,Templates,我正在尝试使用我自己的pair类实现一个单链表模板类。我这样做是为了提高我的C++技能,所以我不只是使用STL。 我的列表模板由单个类型参数化: template <typename T> class LinkedList { private: Pair<T, Pair<???>* >* _head; }; 模板 类链接列表 { 私人: Pair典型的单链表由节点组成,每个节点包含指向下一个节点的指针或表示结束的空指针: template <t

我正在尝试使用我自己的pair类实现一个单链表模板类。我这样做是为了提高我的C++技能,所以我不只是使用STL。 我的列表模板由单个类型参数化:

template <typename T>
class LinkedList
{
private:
    Pair<T, Pair<???>* >* _head;
};
模板
类链接列表
{
私人:

Pair典型的单链表由节点组成,每个节点包含指向下一个节点的指针或表示结束的空指针:

template <typename T> List
{
    struct Node
    {
        Node * next;
        T value;
    };

    Node * head;

    List() : head(NULL) { }

    // ... insert, delete, find, iterate ...
}
模板列表
{
结构体类型
{
节点*下一步;
T值;
};
节点*头;
List():head(NULL){}
//…插入、删除、查找、迭代。。。
}

也许您正在尝试这样做:

template <typename T>
class LinkedList
{
private:
    Pair<T, ListList<T> >* _head;
};
模板
类链接列表
{
私人:
配对*头;
};

想想看。你能有一个包含自身的框吗?你是在尝试创建编译时列表还是运行时列表?Kerek SB:你不能有一个包含自身的框,但你可以有一个包含相同类型的不同框。这就是我试图建模的。@Dave链接列表不包含节点,它们包含链接lists。@戴夫:不,你不能,因为这会给你一个无限的盒子嵌套。这基本上就是我想做的,只是我想使用一个对模板,而不是定义一个节点结构。你的解决方案肯定会奏效,但我很好奇我的想法是否也能奏效。@戴夫:不,因为你试图定义一个无限的盒子递归结构。您的想法与
struct X{X;}完全相同
@hyde:对不起,你说得对--我原以为模板参数的规格说明会是一个递归问题,但鉴于你只需要一个指向该对的指针,它实际上不应该是。毕竟,你可以说
pair
然后再强制转换指针,那就可以了。@hyde:所以,我认为你只需要交替使用两个参数即可sted类,如Vaughn的回答:
struct Node{Pair head;}
。然后它几乎与我的代码相同,只是您将两个数据成员放在一对中。我猜它应该是
pair\u head
,但这看起来很合理。@KerrekSB:我猜OP的意图是将空列表表示为空。