链接列表和节点

时间:2013-05-25 11:42:28

标签: c++ list linked-list

我目前正在学习链接列表如何在C ++中工作,我编写了这段代码,这给了我编译错误,而且我没有得到我在早期版本的代码中获得的重新分配。这是我之前丢失的代码的早期版本。

所以我需要帮助:

add函数(将元素放在列表中的最后一个)应该如何?

我需要向解构器添加什么内容?

remove_if(T& t)应删除值为t的所有元素,remove_if(predicate& pred)应删除所有元素pred返回true?

我需要在T>之间添加什么? ?

我编辑的代码:

    #include <iostream>
    using namespace std;

    template <class T>
    class List;

    template <class T>
    class Node {
    public:
      Node ( T *t) : data(t), next(0) {}
      ~Node();
    private:
      T *data;
      Node* next;
      friend class List<T>;
    };

    template <class T>

    class Predicate {
     public:
      Predicate() {}
      virtual bool operator()( const T& v) = 0;
    };

    template <class T>
    class List {
    public:
      List() : first(new Node<T>(T())) {} //"dummy"-node

      void add( T *t );
      void remove_if( T t );
      void remove_if( Predicate<T> &pred );
      void print(); 

    private:  
      Node<T> *first;
    };

主:

    int main()
    {

      List<int> intlista;
      intlista.add( new int(1) );
      intlista.add( new int(2) );
      intlista.add( new int(3) );
      intlista.add( new int(2) );
      intlista.add( new int(4) );
      intlista.add( new int(5) );
      intlista.add( new int(6) );

      intlista.print();

      intlista.remove_if( 2 );
      intlista.print();

      Between<int> one_to_four(1,4);
      intlista.remove_if( one_to_four );  
      intlista.print();
    }

写道:

    { 1 2 3 2 4 5 6 }
    { 1 3 4 5 6 }
    { 5 6 }

1 个答案:

答案 0 :(得分:0)

这实际上并没有回答你的问题,但是:

template <class T>
class Node {
public:
  Node ( T *t) : data(t), next(0) {}
  ~Node();
private:
  T *data;
  Node* next;
  friend class List<T>;
};

在链表中存储指向T的指针似乎是错误的。模板化链表的重点在于存储的数据可以直接存储在列表中(如果出于好的或坏的原因,您希望将int *存储在列表中,那么您可以{ {1}}。

现在提出您的实际问题: List<int *> list;是你的一个班级吗?如果是这样,你是否包含了它的标题?

相关问题