1
0

list.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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 = new Type(value); }
  12. Type& operator*() { return *_value; }
  13. };
  14. class iterator {
  15. private:
  16. Node* _ptr;
  17. // TBD 其它信息
  18. public:
  19. iterator(Node* ptr);
  20. iterator& operator++();
  21. iterator& operator--();
  22. bool operator== (const iterator& it);
  23. bool operator!= (const iterator& it);
  24. Type& operator*() { return **_ptr; }
  25. Node* operator&() {
  26. return _ptr;
  27. }
  28. };
  29. private:
  30. Node dummy;
  31. Node* head = &dummy;
  32. Node* tail = &dummy;
  33. public:
  34. List();
  35. public:
  36. iterator& operator[] (int index);
  37. List& operator+= (Type& value);
  38. iterator append(Type& value);
  39. public:
  40. iterator begin();
  41. iterator end();
  42. iterator rbegin();
  43. iterator rend();
  44. };
  45. #endif