list.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef __L87_LIST_H__
  2. #define __L87_LIST_H__
  3. template<typename Type>
  4. class List {
  5. public:
  6. struct Node {
  7. Type* _value;
  8. Node* _prev, * _next;
  9. Node() : _prev(nullptr), _next(nullptr) { _value = nullptr; }
  10. Node(Node* prev, Node* next) : _prev(prev), _next(next) { _value = nullptr; }
  11. Node(Type& value, Node* prev = nullptr, Node* next = nullptr) : _prev(prev), _next(next) { _value = &value; }
  12. ~Node() { _prev = _next = nullptr, _value = nullptr; }
  13. Type& operator*() { return *_value; }
  14. };
  15. class iterator {
  16. private:
  17. Node* _ptr;
  18. // TBD 其它信息
  19. public:
  20. iterator(Node* ptr);
  21. iterator& operator++();
  22. iterator& operator--();
  23. bool operator== (const iterator& it);
  24. bool operator!= (const iterator& it);
  25. Type& operator*() { return **_ptr; }
  26. Node* operator&() { return _ptr; }
  27. };
  28. private:
  29. Node dummy;
  30. Node* head = &dummy;
  31. Node* tail = &dummy;
  32. public:
  33. List();
  34. ~List();
  35. size_t erase(Type& target);
  36. void erase(Node* node);
  37. public:
  38. iterator& operator[] (int index);
  39. List& operator+= (Type& value);
  40. iterator append(Type& value);
  41. public:
  42. iterator begin();
  43. iterator end();
  44. iterator rbegin();
  45. iterator rend();
  46. };
  47. #include "list.inl"
  48. #endif