链表和节点



我目前正在学习链表如何在c++中工作,我已经编写了这段代码,这给了我编译错误,我没有得到我在早期版本的代码中得到的结果。这是我之前丢失的代码的早期版本。

所以我需要帮助的是:

add函数(将元素放在列表的最后)应该是什么样子?

我需要在解构函数中添加什么?

和remove_if(T&T)应该删除所有值为T的元素,remove_if(predicate&Pred)应该删除所有的元素Pred返回真?

Between 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 }

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

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 *存储在列表中,那么您可以创建List<int *> list;

现在你的实际问题:Between是你的课吗?如果有,您是否包含了它的标题?

相关内容

  • 没有找到相关文章

最新更新