in_chainz

Untitled

Mar 19th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.77 KB | None | 0 0
  1. #include <cstddef>
  2. #include <iostream>
  3.  
  4. class Vector {
  5. private:
  6.     int * buffer_;
  7.     size_t size_;
  8.     size_t capacity_;
  9. public:
  10.     Vector() {
  11.         size_ = 0;
  12.         capacity_ = 0;
  13.         buffer_ = nullptr;
  14.     }
  15.     Vector(const Vector& other) {
  16.         buffer_ = other.buffer_;
  17.         size_ = other.size_;
  18.         capacity_ = other.capacity_;
  19.     }
  20.  
  21.     void reserve(size_t size) {
  22.         int * new_buf = new int[size];
  23.         for (size_t i = 0; i < capacity_; ++i) {
  24.             new_buf[i] = buffer_[i];
  25.         }
  26.         capacity_ = size;
  27.         delete [] buffer_;
  28.         buffer_ = new_buf;
  29.     }
  30.  
  31.  
  32.     void push_back(int val) {
  33.         if (size_ >= capacity_) {
  34.             size_t new_cap = capacity_ ? capacity_ * 2 : 1;
  35.             reserve(new_cap);
  36.         }
  37.         buffer_[size_++] = val;
  38.     }
  39.     void pop_back() {
  40.         if (!size_)
  41.             return;
  42.         --size_;
  43.     }
  44.  
  45.     const int operator[](size_t i) const {
  46.         return buffer_[i];
  47.     }
  48.  
  49.     int &operator[](size_t i) {
  50.         return buffer_[i];
  51.     }
  52.  
  53.     Vector& operator=(const Vector& other) {
  54.         delete [] buffer_;
  55.         buffer_ = other.buffer_;
  56.         size_ = other.size_;
  57.         return *this;
  58.     }
  59.  
  60.     size_t size() {
  61.         return size_;
  62.     }
  63.  
  64.     ~Vector() {
  65.         delete [] buffer_;
  66.     }
  67. };
  68.  
  69.  
  70. int main() {
  71.     Vector a;
  72.     a.push_back(4);
  73.     a.push_back(6);
  74.     a.push_back(7);
  75.     a.push_back(8);
  76.     a.push_back(9);
  77.     std::cout << "size " << a.size() << std::endl;
  78.     for (size_t i = 0; i < a.size(); ++i) {
  79.         std::cout << a[i] << ' ';
  80.     }
  81.     std::cout << std::endl;
  82.     Vector b = a;
  83.  
  84.     std::cout << "size of b " << b.size() << std::endl;
  85.     for (size_t i = 0; i < b.size(); ++i) {
  86.         std::cout << b[i] << ' ';
  87.     }
  88.     std::cout << std::endl;
  89.  
  90.     a.pop_back();
  91.  
  92.     std::cout << "size " << a.size() << std::endl;
  93.     for (size_t i = 0; i < a.size(); ++i) {
  94.         std::cout << a[i] << ' ';
  95.     }
  96.     std::cout << std::endl;
  97.  
  98.     a.pop_back();
  99.  
  100.     std::cout << "size " << a.size() << std::endl;
  101.     for (size_t i = 0; i < a.size(); ++i) {
  102.         std::cout << a[i] << ' ';
  103.     }
  104.     std::cout << std::endl;
  105.  
  106.     a.pop_back();
  107.  
  108.     std::cout << "size " << a.size() << std::endl;
  109.     for (size_t i = 0; i < a.size(); ++i) {
  110.         std::cout << a[i] << ' ';
  111.     }
  112.     std::cout << std::endl;
  113.  
  114.     a.pop_back();
  115.  
  116.     std::cout << "size " << a.size() << std::endl;
  117.     for (size_t i = 0; i < a.size(); ++i) {
  118.         std::cout << a[i] << ' ';
  119.     }
  120.     std::cout << std::endl;
  121.  
  122.     a.pop_back();
  123.  
  124.     std::cout << "size " << a.size() << std::endl;
  125.     for (size_t i = 0; i < a.size(); ++i) {
  126.         std::cout << a[i] << ' ';
  127.     }
  128.     std::cout << std::endl;
  129.  
  130.  
  131. }
Advertisement
Add Comment
Please, Sign In to add comment