Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.11 KB | None | 0 0
  1. // ConsoleApplication2.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. #include "pch.h"
  5. #include <iostream>
  6. #include <vector>
  7.  
  8. template <class T>
  9. class Victor {
  10. private:
  11.     size_t len;
  12.     T *arr;
  13. public:
  14.     //TODO: конструктор копирования
  15.     Victor(T *arr) : len(sizeof(arr)){
  16.         this->arr = new T[len];
  17.         for (auto i = 0; i < len; i++)
  18.             this->arr[i] = arr[i];
  19.     }
  20.  
  21.     //Victor(T &&arr) {
  22.     //  len = len(sizeof(arr) / sizeof(T));
  23.     //  this->arr = arr;
  24.     //}
  25.  
  26.     Victor(const Victor &obj) : len(obj.len){
  27.         this->arr = new T[len];
  28.         for (auto i = 0; i < len; i++)
  29.             this->arr[i] = obj.arr[i];
  30.     }
  31.  
  32.     Victor(Victor &&obj) {
  33.         len = obj.len;
  34.         arr = obj.arr;
  35.         obj.arr = nullptr;
  36.     }
  37.  
  38.  
  39.  
  40.     // Оператор присвоения
  41.     Victor& operator= (const Victor &obj) {
  42.         if (this == &obj)
  43.             return *this;
  44.  
  45.         delete[] arr;
  46.  
  47.         this->len = obj.len;
  48.         this->arr = new T[len];
  49.         for (auto i = 0; i < len; i++)
  50.             this->arr[i] = obj.arr[i];
  51.         return *this;
  52.     }
  53.  
  54.     //TODO: конструктор перемещения
  55.  
  56.  
  57.  
  58.     // ----------------------------
  59.     // метод begin
  60.     T* begin() {
  61.         return arr;
  62.     }
  63.     // метод end
  64.     T* end() {
  65.         return (arr + len);
  66.     }
  67.     // метод size
  68.     size_t size() {
  69.         return len;
  70.     }
  71.  
  72.     void printVector() {
  73.         for (auto i = 0; i != len; i++)
  74.             std::cout << arr[i] << std::ends;
  75.         std::cout << std::endl;
  76.     }
  77.     // -----------------------------
  78.     // метод push_back; TODO: Доделать копирование и перемещение;
  79.     void push_back(const T& el)
  80.     {
  81.         T* arr1 = new T[len + 1];
  82.         for (auto i = 0; i < len; i++)
  83.             arr1[i] = arr[i];
  84.         arr1[len] = el;
  85.         delete[] arr;
  86.         arr = arr1;
  87.         len++;
  88.     }
  89.  
  90.     void push_back(T&& el)
  91.     {
  92.         T* arr1 = new T[len + 1];
  93.         for (auto i = 0; i < len; i++)
  94.             arr1[i] = arr[i];
  95.         arr1[len] = el;
  96.         delete[] arr;
  97.         arr = arr1;
  98.         len++;
  99.     }
  100.     // TODO: метод pop_back
  101.     void pop_back()
  102.     {
  103.         T* arr1 = new T[len - 1];
  104.         for (auto i = 0; i < len - 1; i++)
  105.             arr1[i] = arr[i];
  106.         delete[] arr;
  107.         arr = arr1;
  108.         len--;
  109.     }
  110.     // TODO: метод erase
  111.     void erase(const T* inx) {
  112.         T *narr = new T[len - 1];
  113.         for (auto i = arr; i != inx; i++)
  114.             *(narr + (i - arr)) = *i;
  115.         for (auto i = inx + 1; i != arr + len; i++)
  116.             *(narr + (i - arr - 1)) = *i;
  117.         delete[] arr;
  118.         arr = narr;
  119.         len--;
  120.     }
  121.     void erase(const T* b, const T* e) {
  122.         if (e > b) {
  123.             auto declen = e - b + 1;
  124.             T *narr = new T[len - declen];
  125.             for (auto i = arr; i != b; i++)
  126.                 *(narr + (i - arr)) = *i;
  127.             for (auto i = e + 1; i != arr + len; i++)
  128.                 *(narr + (i - arr - declen)) = *i;
  129.             delete[] arr;
  130.             arr = narr;
  131.             len -= declen;
  132.         }
  133.     }
  134.  
  135. };
  136.  
  137.  
  138. int main()
  139. {
  140.     int a[4] = { 1, 2, 3, 4 };
  141.     //std::cout << sizeof(a)  << std::endl;
  142.     //char b[2] = { '1', '2'};
  143.     Victor<int> v(a);
  144.     //Victor<char> v2(b);
  145.     v.push_back(3*(1+5));
  146.     v.erase(v.begin(), v.begin() + 1);
  147.     v.printVector();
  148.     //v2.printVector();
  149.     //std::vector<int> v1 = { 1, 2, 3 };
  150.     //std::cout << *(v1.end()-1);
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement