Advertisement
Guest User

Untitled

a guest
Oct 21st, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <deque>
  4. #include <algorithm>
  5. #include <iomanip>
  6. #include <math.h>
  7. #include <set>
  8. #include <utility>
  9. #include <map>
  10. #include <string>
  11. #include <exception>
  12. #include <stddef.h>
  13. #include <memory>
  14. #include <list>
  15.  
  16. using namespace std;
  17.  
  18. template <typename T>
  19. class Value;
  20.  
  21. template<typename T>
  22. class LIterator {
  23. public:
  24.     Value<T>* cur;
  25.     LIterator<T>() {
  26.     }
  27.     LIterator<T>(Value<T> * new_cur) {
  28.         cur = new_cur;
  29.     }
  30.     LIterator<T>& operator++() {
  31.         cur = cur->next;
  32.         return (*this);
  33.     }
  34.     const T operator*() const {
  35.         return *cur->field;
  36.     }
  37.     bool operator== (const LIterator<T>& other) {
  38.         return cur == other.cur;
  39.     }
  40.     bool operator != (const LIterator<T>& other) {
  41.         return !(*this == other);
  42.     }
  43. };
  44.  
  45. template <typename T>
  46. class Value{
  47. public:
  48.     T* field = nullptr;
  49.     struct Value* next = nullptr;
  50.     struct Value* prev = nullptr;
  51.     Value<T>() {
  52.         cout << "default constructor\n";
  53.     }
  54.     ~Value() {
  55.         delete field;
  56.     }
  57. };
  58.  
  59. template <typename T>
  60. class List{
  61. public:
  62.     Value<T>* fir;
  63.     Value<T>* last;
  64.     Value<T> fake;
  65.     int sz = 0;
  66.     List<T>() {
  67.         cout << "List default constructor\n";
  68.         fir = &fake;
  69.         last = &fake;
  70.         last->prev = fir;
  71.         fir->next = last;
  72.     }
  73.     int size() const {
  74.         return sz;
  75.     }
  76.     void push_back(const T& new_val) {
  77.         if (sz == 0) {
  78.             fir = new Value<T>;
  79.             fir->field = new T(new_val);
  80.             fir->next = last;
  81.             last->prev=  fir;
  82.             ++sz;
  83.             return;
  84.         }
  85.         ++sz;
  86.         Value<T>* cur = new Value<T>;
  87.         cur->field = new T(new_val);
  88.         cur->prev = last->prev;
  89.         cur->next = last;
  90.         last->prev->next = cur;
  91.         last->prev = cur;
  92.     }
  93.     void pop_back() {
  94.         if (sz == 1) {
  95.             delete fir;
  96.             fir = last;
  97.             fir->next = nullptr;
  98.             last->prev = nullptr;
  99.         } else {
  100.             last->prev = last->prev->prev;
  101.             delete last->prev->next;
  102.             last->prev->next = last;
  103.         }
  104.         --sz;
  105.     }
  106.     void push_front(const T& new_val) {
  107.         if (sz == 0) {
  108.             fir = new Value<T>;
  109.             fir->field = new T(new_val);
  110.             fir->next = last;
  111.             last->prev=  fir;
  112.             ++sz;
  113.             return;
  114.         }
  115.         ++sz;
  116.         Value<T>* cur = new Value<T>;
  117.         cur->field = new T(new_val);
  118.         cur->prev = nullptr;
  119.         cur->next = fir;
  120.         fir->prev = cur;
  121.         fir = cur;
  122.     }
  123.     void pop_front() {
  124.         if (sz == 1) {
  125.             delete fir;
  126.             fir = last;
  127.             fir->next = nullptr;
  128.             last->prev = nullptr;
  129.         } else {
  130.             fir = fir->next;
  131.             delete fir->prev;
  132.         }
  133.     }
  134.     LIterator<T> begin() {
  135.         return LIterator<T>(fir);
  136.     }
  137.     LIterator<T> end() {
  138.         return LIterator<T>(last);
  139.     }
  140.     ~List() {
  141.         while (sz) {
  142.             pop_front();
  143.         }
  144.     }
  145. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement