namespace STD {
template<class C> class ListIterator; // LIstIterator에 대한 전방 선언
template<typename T> class Node; // Node에 대한 전방 선언
//template<typename T> class DNode; // DNode에 대한 전방 선언
template<typename T=int, class NODE=Node<T> >
class List
{
public:
typedef T elem_type;
typedef T* elem_pointer_type;
typedef NODE node_type;
typedef NODE* node_pointer_type;
typedef List<T,NODE> _THIS;
typedef ListIterator<_THIS> iterator;
// STL required
typedef T value_type;
typedef unsigned int difference_type;
typedef T* pointer;
typedef T& reference;
iterator begin() {
return ListIterator<_THIS>(_head->next);
}
iterator end() {
return ListIterator<_THIS>(_tail);
}
List() {
_head = new NODE(0);
_tail = new NODE(0);
_tail->next = NULL;
_head->next = _tail;
_lastNode = _head;
}
void push_back(T element) {
NODE* elemNode = new NODE(element);
elemNode->next = _tail;
_lastNode->push_back( elemNode );
_lastNode = elemNode;
}
void push_back(NODE* next) {
_lastNode->push_back( next );
_lastNode = next;
}
private:
NODE* _head;
NODE* _tail;
NODE* _lastNode; // Last Node
};
}
'C++' 카테고리의 다른 글
STL 요소 만들어보기(4) (0) | 2012.11.16 |
---|---|
STL 요소 만들어보기(3) (0) | 2012.11.16 |
STL 요소 만들어보기(1) (0) | 2012.11.16 |
[C++] template을 사용하여 연결리스트 구현 (0) | 2012.11.16 |
[C++0x] Move Operator (0) | 2012.11.16 |