我目前正在学习链表如何在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
是你的课吗?如果有,您是否包含了它的标题?