テンプレート実装双方向チェーンテーブル


#include<iostream>
#include<string>
using namespace std;

template<typename T>
struct Node
{
public:
	Node(const T& d)
		:_next(NULL)
		, _prev(NULL)
		, _data(d)
	{}
	T _data;
	Node<T>* _next;
	Node<T>* _prev;
};
template<typename T>
class DList
{
public:
	DList();
	~DList();
	DList(const DList<T>& dl);
	DList& operator=(const DList<T>& dl);
	void PushBack(const T&d);
	void PopBack();
	void PushFront(const T&d);
	void PopFront();
	void Print()const;
private:
	Node<T>* _head;
	Node<T>* _tail;
};
template<typename T>
DList<T>::DList()
:_head(NULL)
, _tail(NULL)
{}

template<typename T>
DList<T>::~DList()
{
	Node<T>* cur = _head;
	while (cur)
	{
		Node<T>* del = cur;
		cur = cur->_next;
		delete del;
	}
}
template<typename T>
DList<T>::DList(const DList<T>& dl)
{

}
template<typename T>
DList<T>& DList<T>::operator=(const DList<T>& dl)
{

}
template<typename T>
void DList<T>::PushBack(const T&d)
{
	if (_head == NULL)
	{
		_head = new Node<T>(d);
		_tail = _head;
	}
	else
	{
		Node<T> *newNode= new Node<T>(d);
		_tail->_next = newNode;
		newNode->_prev = _tail;
		_tail = newNode;
	}
}

template<typename T>
void DList<T>::Print()const
{
	Node<T>* cur = _head;
	while (cur)
	{
		cout << cur->_data << "->";
		cur = cur->_next;
	}
	cout << "over" << endl;
}

int main()
{
	DList<int> int_list;
	int_list.PushBack(1);
	int_list.PushBack(2);
	int_list.PushBack(3);
	int_list.PushBack(4);
	int_list.Print();
	getchar();
	return 0;
}