0

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

所以我需要帮助:

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

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

而应该删除所有值为t的元素的remove_if(T&t),应该删除所有元素pred的remove_if(predicate&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 }
4

1 回答 1

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 *在列表中,那么您将List<int *> list;.

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

于 2013-05-25T11:56:02.117 回答