1
0

list.h 1.2 KB

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