Advertisement
Guest User

Untitled

a guest
Oct 21st, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.03 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.     }
  33.     const T operator*() const {
  34.         return *cur->field;
  35.     }
  36.     bool operator== (const LIterator<T>& other) {
  37.         return cur == other.cur;
  38.     }
  39.     bool operator != (const LIterator<T>& other) {
  40.         return !(*this == other);
  41.     }
  42. };
  43.  
  44. template <typename T>
  45. class Value{
  46. public:
  47.     T* field = nullptr;
  48.     struct Value* next = nullptr;
  49.     struct Value* prev = nullptr;
  50.     Value<T>() {
  51.         cout << "default constructor\n";
  52.     }
  53.     ~Value() {
  54.         cout << "here\n";
  55.     }
  56. };
  57.  
  58. template <typename T>
  59. class List{
  60. public:
  61.     Value<T>* fir;
  62.     Value<T>* last;
  63.     int sz = 0;
  64.     List<T>() {
  65.         fir = new Value<T>;
  66.         last = new Value<T>;
  67.         last->prev = fir;
  68.         fir->next = last;
  69.         cout << "List default constructor\n";
  70.     }
  71.     int size() const {
  72.         return sz;
  73.     }
  74.     void push_back(const T& new_val) {
  75.         if (sz == 0) {
  76.             last->field = new T(new_val);
  77.             ++sz;
  78.             return;
  79.         }
  80.         //sz = 0
  81.         ++sz;
  82.         Value<T>* cur = new Value<T>;
  83.         cur->field = new T(new_val);
  84.         cur->prev = &(*last);
  85.         last->next = cur;
  86.         last = last->next;
  87.     }
  88.     void pop_back() {
  89.         //sz = 0
  90.         --sz;
  91.         delete last->field;
  92.         delete last->next;
  93.         last = last->prev;
  94.         last->next->prev = nullptr;
  95.         delete last->next->prev;
  96.         last->next = nullptr;
  97.     }
  98.     void push_front(const T& new_val) {
  99.         //sz = 0
  100.         if (sz == 0) {
  101.             fir->field = new T(new_val);
  102.             ++sz;
  103.             return;
  104.         }
  105.         ++sz;
  106.         Value<T> cur;
  107.         *cur.field = new_val;
  108.         cur.next = &(*fir);
  109.         (*fir).prev = &cur;
  110.         fir = fir->prev;
  111.     }
  112.     void pop_front() {
  113.         //sz = 0
  114.         --sz;
  115.         delete fir->field;
  116.         delete fir->prev;
  117.         fir = fir->next;
  118.         fir->prev->next = nullptr;
  119.         delete fir->prev->next;
  120.         fir->prev = nullptr;
  121.     }
  122.     LIterator<T> begin() {
  123.         if (fir->field == nullptr) {
  124.             return LIterator<T>(fir->next);
  125.         } else {
  126.             return LIterator<T>(fir);
  127.         }
  128.     }
  129.     LIterator<T> end() {
  130.         if (last->field == nullptr) {
  131.             return LIterator<T>(last->prev);
  132.         } else {
  133.             push_back(T());
  134.             return LIterator<T>(last);
  135.         }
  136.     }
  137.     ~List() {
  138. //        delete fir;
  139. //        delete last;
  140.     }
  141. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement