Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <iostream>
- #include <string>
- using namespace std;
- template <typename T>
- class Vector{
- unsigned sz;
- T* data;
- public:
- Vector():sz(0),data(new T[0]){}
- Vector(Vector & v):sz(v.sz),data(new T[v.sz]){
- for(unsigned i=0; i<v.sz; ++i)
- data[i] = v.data[i];
- }
- Vector(unsigned s):sz(s),data(new T[s]){}
- Vector(unsigned s,T x):sz(s),data(new T[s]){
- for(unsigned i=0; i<s; ++i)
- data[i] = x;
- }
- ~Vector(){delete[] data;}
- Vector & operator=(const Vector & v){
- if (&v!=this){
- sz = v.sz;
- data = new T[sz];
- for(unsigned i = 0; i < sz; ++i)
- data[i] = v.data[i];
- }
- return *this;
- }
- T* begin()const{
- return data;
- }
- T* end()const{
- return data+sz;
- }
- class Iterator{
- T* curr;
- friend Vector;
- public:
- Iterator():curr(0){}
- Iterator(const Vector & l):curr(l.begin()){}
- Iterator(T* n):curr(n){}
- Iterator(const Iterator & it): curr(it.curr){}
- Iterator & operator=(const Iterator & it){
- if (&it!=this){
- curr = it.curr;
- }
- return *this;
- }
- Iterator & operator++(){
- ++curr;
- return *this;
- }
- Iterator & operator--(){
- --curr;
- return *this;
- }
- Iterator & operator+(int k){
- curr+=k;
- return *this;
- }
- Iterator & operator-(int k){
- curr-=k;
- return *this;
- }
- bool operator==(const Iterator & it)const{
- return curr==it.curr;
- }
- bool operator==(T* n)const{
- return curr==n;
- }
- bool operator!=(const Iterator & it)const{
- return curr!=it.curr;
- }
- bool operator!=(T* n)const{
- return curr!=n;
- }
- T & operator*()const{return *curr;}
- void operator*(T d){*curr = d}
- T* current()const{return curr;}
- };
- unsigned size()const{
- return sz;
- }
- bool empty()const{
- return sz;
- }
- T & operator[](unsigned i){
- if (i>=size || i<0){
- return NULL;
- }
- return data[i];
- }
- T operator[](unsigned i)const{
- if (i>=size || i<0){
- return NULL;
- }
- return data[i];
- }
- void push_back(T x){
- sz++;
- T* temp = new T[sz];
- for(unsigned i = 0; i < sz - 1; ++i)
- temp[i] = data[i];
- temp[sz-1] = x;
- delete data;
- data = temp;
- }
- void pop_back(){
- if (sz == 0){
- return NULL;
- }
- sz--;
- T* temp = new T[sz];
- for(unsigned i = 0; i < sz; ++i)
- temp[i] = data[i];
- delete data;
- data = temp;
- }
- void insert(unsigned pos, T x){
- if (pos<1 || pos>sz + 1){
- return NULL;
- }
- ++sz;
- T* temp = new T[sz];
- for(unsigned i = 0; i<pos-1; ++i)
- temp[i] = data[i];
- temp[pos - 1] = x;
- for(unsigned i = pos; i < sz; ++i)
- temp[i] = data[i-1];
- delete data;
- data = temp;
- }
- void insert(Iterator it, T x){
- ++sz;
- T* temp = new T[sz];
- unsigned pos = 0;
- for(Vector::Iterator i = begin(); i!=it; ++i){
- temp[pos] = data[pos];
- ++pos;
- }
- temp[pos] = x;
- ++pos;
- for(Vector::Iterator i = it+1; i!=end(); ++i){
- temp[pos] = data[pos-1];
- ++pos;
- }
- delete data;
- data = temp;
- }
- void erase(unsigned pos){
- if (pos<1 || pos>sz){
- return NULL;
- }
- sz--;
- T* temp = new T[sz];
- for(unsigned i = 0; i<pos-1; ++i)
- temp[i] = data[i];
- for(unsigned i = pos-1; i < sz; ++i)
- temp[i] = data[i+1];
- delete data;
- data = temp;
- }
- void erase(Iterator it){
- sz--;
- T* temp = new T[sz];
- unsigned pos = 0;
- for(Vector::Iterator i = begin(); i!=it; ++i){
- temp[pos] = data[pos];
- ++pos;
- }
- for(Vector::Iterator i = it+1; i != end()+1; ++i){
- temp[pos] = data[pos+1];
- ++pos;
- }
- delete data;
- data = temp;
- }
- void erase(unsigned pos1, unsigned pos2){
- if (pos1<1 || pos1>sz || pos2<1 || pos2>sz || pos1>=pos2){
- return NULL;
- }
- sz -= pos2-pos1;
- T* temp = new T[sz];
- for(unsigned i = 0; i<pos1-1; ++i)
- temp[i] = data[i];
- for(unsigned i = pos1-1; i < sz; ++i)
- temp[i] = data[i + pos2-pos1];
- delete data;
- data = temp;
- }
- void erase(Iterator it1, Iterator it2){
- unsigned d = 0;
- for(Vector::Iterator i = it1; i != it2; ++i)
- ++d;
- sz -= d;
- unsigned pos = 0;
- T* temp = new T[sz];
- for(Vector::Iterator i = begin(); i!=it1; ++i){
- temp[pos] = data[pos];
- ++pos;
- }
- for(Vector::Iterator i = it2; i != end()+d; ++i){
- temp[pos] = data[pos+d];
- ++pos;
- }
- delete data;
- data = temp;
- }
- void print(){
- for(unsigned i = 0; i < sz; ++i)
- cout << data[i] << ' ';
- cout << endl;
- }
- };
Add Comment
Please, Sign In to add comment