Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstring>
  4. #include <memory>
  5. #include <algorithm>
  6.  
  7.  
  8. template <typename T>
  9. class DiyVector
  10. {
  11. private:
  12.     unsigned int elSize = 0;
  13.     unsigned int totalSize = 10;
  14.     T* elements = nullptr;
  15.  
  16.     void reserve(unsigned int size)
  17.     {
  18.         if (size < totalSize)
  19.             return; //Don't shrink
  20.         else
  21.         {
  22.             T* newData = new T[size];
  23.             for (unsigned int i = 0; i < elSize; ++i)
  24.                 newData[i] = elements[i];
  25.             elements = newData;
  26.         }
  27.     }
  28.    
  29. public:
  30.     DiyVector() : totalSize(10), elSize(0), elements(new T[totalSize]){}
  31.     ~DiyVector() { delete elements;  }
  32.  
  33.     T& at(unsigned int index) const
  34.     {
  35.         if (index >= elSize)
  36.             throw new OutOfRange();
  37.         return elements[index];
  38.     }
  39.  
  40.     unsigned int size() const
  41.     {
  42.         return elSize;
  43.     }
  44.  
  45.     void pushBack(const T& item)
  46.     {
  47.         if (elSize + 1 > totalSize)
  48.             reserve(totalSize * 1.5);
  49.         elements[elSize++] = item;
  50.     }
  51.  
  52.     void popBack()
  53.     {
  54.         --elSize;
  55.     }
  56.  
  57.     void erase(unsigned int index)
  58.     {
  59.         if (index >= elSize)
  60.             throw new OutOfRange();
  61.         for (unsigned int i = index; i < elSize - 1; ++i)
  62.         {
  63.             elements[i] = elements[i] + 1;
  64.         }
  65.     }
  66.  
  67.     void insert(unsigned int index, const T& item)
  68.     {
  69.         if (index >= elSize + 1)
  70.             throw new OutOfRange();
  71.         if (elSize + 1 > totalSize)
  72.             reserve(totalSize * 1.5);
  73.         elSize += 1;
  74.         for (unsigned int i = index + 1; i < elSize - 1; ++i)
  75.         {
  76.             elements[i + 1] = elements[i];
  77.         }
  78.         elements[index] = item;
  79.     }
  80.  
  81.     void print()
  82.     {
  83.         for (int i = 0; i < elSize; i++)
  84.         {
  85.             std::cout << elements[i] << " ";
  86.         }
  87.     }
  88.  
  89.     class OutOfRange {};
  90. };
  91.  
  92.  
  93. int main()
  94. {
  95.     DiyVector<int> v;
  96.     std::cout << "array size: " << v.size() << "\n";
  97.     v.pushBack(3);
  98.     std::cout << "3\n";  
  99.     std::cout << "array size: " << v.size() << "\n";
  100.     v.pushBack(4);
  101.     std::cout << "4\n";
  102.     v.pushBack(6);
  103.     std::cout << "6\n";
  104.     v.pushBack(2);
  105.     std::cout << "2\n";
  106.     std::cout << "array size: " << v.size() << "\n";
  107.     v.print();
  108.     std::cout << "\n";
  109.     v.insert(1, 7);
  110.     v.print();
  111.     std::cout << "\n";
  112.     v.erase(1);
  113.     v.print();
  114.     std::cout << "\n";
  115.     v.pushBack(5);
  116.     v.print();
  117.     std::cout << "\n";   
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement