Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- template <typename DT>
- class AdvDeque {
- private:
- int n, dim, first, last;
- DT* v;
- public:
- AdvDeque() {
- n = 0;
- dim = 0;
- first = last = -1;
- v = nullptr;
- }
- AdvDeque(int _size)
- {
- n = 0;
- dim = size;
- first = last = 0;
- v = new DT[dim];
- }
- AdvDeque(const AdvDeque& tmp) {
- n = tmp.n;
- dim = tmp.dim;
- first = tmp.first;
- last = tmp.last;
- v = new DT[dim];
- for (int i = first; i < last; i++) {
- v[i] = tmp.v[i];
- }
- }
- ~AdvDeque()
- {
- delete[] v;
- }
- int size() {
- return n;
- }
- DT& operator [] (int idx) {
- if (idx >= 0 && idx < n)
- return v[first + idx];
- else throw out_of_range("vectorul a depasit limita");
- }
- void push_back(DT const& el) {
- if (dim == 0)
- {
- v = new int[1];
- v[0] = el;
- n = dim = 1;
- first = last = 0;
- }
- else if (last + 1 == dim) {
- dim *= 2;
- last++;
- DT* aux = new DT[dim];
- for (int i = first; i < last; i++) {
- aux[i] = v[i];
- }
- n++;
- aux[last] = el;
- delete[] v;
- v = aux;
- }
- else {
- last++;
- v[last] = el;
- n++;
- }
- }
- void pop_back() {
- if (n > 0) {
- n--;
- last--;
- dim = n;
- }
- else {
- throw out_of_range("vector is empty");
- }
- }
- void push_front(DT const& el) {
- if (dim == 0) {
- v = new int[1];
- v[0] = el;
- n = dim = 1;
- first = last = 0;
- }
- else {
- dim *= 2;
- ++last;
- DT* aux = new DT[dim];
- for (int i = first; i < last; i++) {
- aux[i] = v[i];
- }
- n++;
- first--;
- aux[first] = el;
- delete[] v;
- v = aux;
- }
- }
- };
- int main() {
- AdvDeque<int> v;
- int n, x;
- cin >> n;
- for (int i = 0; i < n; i++) {
- cin >> x;
- v.push_back(x);
- }
- for (int i = 0; i < n; i++)
- cout << v[i] << " ";
- cout << endl;
- v.push_front(5);
- for (int i = 0; i < v.size(); i++)
- cout << v[i] << " ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement