Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. class Vector {
  5. private:
  6.     int* array_;
  7.     size_t size_;
  8.     size_t capacity_;
  9.  
  10. public:
  11.     Vector() : size_(0), capacity_(0), array_(nullptr) {
  12.     }
  13.  
  14.     explicit Vector(size_t size) : size_(size), capacity_(size) {
  15.         array_ = new int[capacity_];
  16.         for (size_t i = 0; i < size_; ++i) {
  17.             array_[i] = 0;
  18.         }
  19.     }
  20.  
  21.     Vector(std::initializer_list<int> list) : size_(list.size()), capacity_(list.size()) {
  22.         array_ = new int[capacity_];
  23.         size_t i = 0;
  24.         for (int it : list){
  25.             array_[i] = it;
  26.             ++i;
  27.         }
  28.     }
  29.  
  30.     Vector(const Vector& rhs): size_(rhs.size_), capacity_(rhs.capacity_) {
  31.         array_ = new int[capacity_];
  32.         for (size_t i = 0; i < size_; ++i) {
  33.             array_[i] = rhs.array_[i];
  34.         }
  35.     }
  36.  
  37.     Vector(Vector&& rhs): size_(rhs.size_), capacity_(rhs.capacity_), array_(rhs.array_) {
  38.         rhs.array_ = nullptr;
  39.         rhs.size_ = 0;
  40.         rhs.capacity_ = 0;
  41.     }
  42.  
  43.     Vector& operator=(Vector rhs) {
  44.         delete[] array_;
  45.         size_ = rhs.size_;
  46.         capacity_ = rhs.capacity_;
  47.         array_ = rhs.array_;
  48.         rhs.array_ = nullptr;
  49.         rhs.size_ = 0;
  50.         rhs.capacity_ = 0;
  51.         return *this;
  52.     }
  53.  
  54.     ~Vector() {
  55.         delete[] array_;
  56.     }
  57.  
  58.     size_t Capacity() const {
  59.         return capacity_;
  60.     }
  61.  
  62.     size_t Size() const {
  63.         return size_;
  64.     }
  65.  
  66.     int& operator[](size_t ind) {
  67.         return array_[ind];
  68.     }
  69.  
  70.     int operator[](size_t ind) const {
  71.         return array_[ind];
  72.     }
  73.  
  74.     void PopBack() {
  75.         --size_;
  76.     }
  77.  
  78.     void Clear() {
  79.         size_ = 0;
  80.     }
  81.  
  82.     void PushBack(int elem) {
  83.         if (size_ < capacity_) {
  84.             array_[size_] = elem;
  85.             ++size_;
  86.         } else {
  87.  
  88.             if (capacity_ == 0) {
  89.                 capacity_ = 1;
  90.             } else {
  91.                 capacity_ *= 2;
  92.             }
  93.             int* new_arr = new int[capacity_];
  94.             for (size_t i = 0; i < size_; ++i) {
  95.                 new_arr[i] = array_[i];
  96.             }
  97.             new_arr[size_] = elem;
  98.             ++size_;
  99.             delete[] array_;
  100.             array_ = new_arr;
  101.         }
  102.     }
  103.  
  104.     void Reserve(size_t cap) {
  105.         if (capacity_ >= cap) {
  106.             return;
  107.         }
  108.         capacity_ = cap;
  109.         int* new_arr = new int[capacity_];
  110.         for (size_t i = 0; i < size_; ++i) {
  111.             new_arr[i] = array_[i];
  112.         }
  113.         delete[] array_;
  114.         array_ = new_arr;
  115.     }
  116.  
  117.     void Swap(Vector& rhs) {
  118.         std::swap(size_, rhs.size_);
  119.         std::swap(capacity_, rhs.capacity_);
  120.         std::swap(array_, rhs.array_);
  121.     }
  122.  
  123. class Iterator: public std::iterator<std::random_access_iterator_tag, int> {
  124.     private:
  125.         int* ptr_;
  126.  
  127.     public:
  128.         Iterator() {
  129.             ptr_ = nullptr;
  130.         }
  131.  
  132.         Iterator(int *ptr) {
  133.             ptr_ = ptr;
  134.         }
  135.  
  136.         Iterator& operator++() {
  137.             ++ptr_;
  138.             return *this;
  139.         }
  140.  
  141.         Iterator operator++(int) {
  142.             Iterator cpy(*this);
  143.             ++ptr_;
  144.             return cpy;
  145.         }
  146.  
  147.         Iterator operator--(int) {
  148.             Iterator cpy(*this);
  149.             --ptr_;
  150.             return cpy;
  151.         }
  152.  
  153.         Iterator& operator--() {
  154.             --ptr_;
  155.             return *this;
  156.         }
  157.  
  158.         int& operator*() {
  159.             return *ptr_;
  160.         }
  161.  
  162.         bool operator==(const Iterator& rhs) const {
  163.             return ptr_ == rhs.ptr_;
  164.         }
  165.  
  166.         bool operator!=(const Iterator& rhs) const {
  167.             return ptr_ != rhs.ptr_;
  168.         }
  169.  
  170.         Iterator& operator+=(int rhs) {
  171.             ptr_ += rhs;
  172.             return *this;
  173.         }
  174.  
  175.         Iterator& operator-=(int rhs) {
  176.             ptr_ -= rhs;
  177.             return *this;
  178.         }
  179.  
  180.         Iterator operator+(int rhs) {
  181.             Iterator iter(ptr_ + rhs);
  182.             return iter;
  183.         }
  184.  
  185.         int operator-(const Iterator& rhs) const {
  186.             return ptr_ - rhs.ptr_;
  187.         }
  188.  
  189.         int*& operator->() {
  190.             return ptr_;
  191.         }
  192.     };
  193.  
  194.     Iterator begin() { //NOLINT
  195.         return Iterator(array_);
  196.     }
  197.  
  198.     Iterator end() { //NOLINT
  199.         return Iterator(array_ + size_);
  200.     }
  201.  
  202.     Iterator Begin() {
  203.         return Iterator(array_);
  204.     }
  205.  
  206.     Iterator End() {
  207.         return Iterator(array_ + size_);
  208.     }
  209.  
  210. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement