Advertisement
vutu10

Untitled

Apr 5th, 2020
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. template <typename DT>
  6. class AdvDeque {
  7. private:
  8.     int n, dim, first, last;
  9.     DT* v;
  10. public:
  11.     AdvDeque() {
  12.         n = 0;
  13.         dim = 0;
  14.         first = last = -1;
  15.         v = nullptr;
  16.     }
  17.     AdvDeque(int _size)
  18.     {
  19.         n = 0;
  20.         dim = size;
  21.         first = last = 0;
  22.         v = new DT[dim];
  23.     }
  24.     AdvDeque(const AdvDeque& tmp) {
  25.         n = tmp.n;
  26.         dim = tmp.dim;
  27.         first = tmp.first;
  28.         last = tmp.last;
  29.         v = new DT[dim];
  30.         for (int i = first; i < last; i++) {
  31.             v[i] = tmp.v[i];
  32.         }
  33.     }
  34.     ~AdvDeque()
  35.     {
  36.         delete[] v;
  37.     }
  38.     int size() {
  39.         return n;
  40.     }
  41.     DT& operator [] (int idx) {
  42.         if (idx >= 0 && idx < n)
  43.             return v[first + idx];
  44.         else throw out_of_range("vectorul a depasit limita");
  45.     }
  46.     void push_back(DT const& el) {
  47.         if (dim == 0)
  48.         {
  49.             v = new int[1];
  50.             v[0] = el;
  51.             n = dim = 1;
  52.             first = last = 0;
  53.         }
  54.         else if (last + 1 == dim) {
  55.             dim *= 2;
  56.             last++;
  57.             DT* aux = new DT[dim];
  58.             for (int i = first; i < last; i++) {
  59.                 aux[i] = v[i];
  60.             }
  61.             n++;
  62.             aux[last] = el;
  63.             delete[] v;
  64.             v = aux;
  65.         }
  66.         else {
  67.             last++;
  68.             v[last] = el;
  69.             n++;
  70.         }
  71.     }
  72.     void pop_back() {
  73.         if (n > 0) {
  74.             n--;
  75.             last--;
  76.             dim = n;
  77.         }
  78.         else {
  79.             throw out_of_range("vector is empty");
  80.         }
  81.     }
  82.     void push_front(DT const& el) {
  83.         if (dim == 0) {
  84.             v = new int[1];
  85.             v[0] = el;
  86.             n = dim = 1;
  87.             first = last = 0;
  88.  
  89.         }
  90.         else {
  91.             dim *= 2;
  92.             ++last;
  93.             DT* aux = new DT[dim];
  94.             for (int i = first; i < last; i++) {
  95.                 aux[i] = v[i];
  96.             }
  97.             n++;
  98.             first--;
  99.             aux[first] = el;
  100.             delete[] v;
  101.             v = aux;
  102.         }
  103.     }
  104. };
  105.  
  106. int main() {
  107.     AdvDeque<int> v;
  108.     int n, x;
  109.     cin >> n;
  110.     for (int i = 0; i < n; i++) {
  111.         cin >> x;
  112.         v.push_back(x);
  113.     }
  114.     for (int i = 0; i < n; i++)
  115.         cout << v[i] << " ";
  116.     cout << endl;
  117.     v.push_front(5);
  118.     for (int i = 0; i < v.size(); i++)
  119.         cout << v[i] << " ";
  120.  
  121.     return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement