我目前正在学习链接列表如何在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 }
答案 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;
是你的一个班级吗?如果是这样,你是否包含了它的标题?