私は現在、C++ でリンク リストがどのように機能するかを学んでおり、このコードを書いたところ、コンパイル エラーが発生し、以前のバージョンのコードで取得した結果が得られません。これは、私が失った以前のコードの初期バージョンです。
だから私は助けが必要です:
add 関数 (要素をリストの最後に置く) はどのように見えるべきですか?
デコンストラクターに何を追加する必要がありますか?
そして、値 t を持つすべての要素を削除する必要がある remove_if( T& t )、すべての要素 pred を削除する必要がある remove_if(predicate& pred) は true を返しますか?
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 }