#include <iostream>
#include <cstdlib>
class IntVector {
public:
IntVector();
IntVector(const IntVector &rhs);
explicit IntVector(int n);
~IntVector() { delete [] data_; }
int Size() const { return size_; }
void Resize(int n);
int &At(int i) { return data_[i]; }
int At(int i) const { return data_[i]; }
void Insert(int pos, int elem) {
IntVector TempIntVector(this->size_);
for (int i = 0; i < this->size_; ++i) TempIntVector.data_[i] = this->data_[i];
delete [] this->data_;
size_++;
data_ = new int[size_];
for (int i = 0; i < pos; ++i) data_[i] = TempIntVector.data_[i];
this->At(pos) = elem;
for (int i = pos+1; i < size_; ++i) data_[i] = TempIntVector.data_[i-1];
}
void Erase(int pos) {
IntVector TempIntVector(this->size_);
for (int i = 0; i < this->size_; ++i) TempIntVector.data_[i] = this->data_[i];
delete [] this->data_;
size_--;
data_ = new int[size_];
for (int i = 0; i < pos; ++i) data_[i] = TempIntVector.data_[i];
for (int i = pos; i < size_; ++i) data_[i] = TempIntVector.data_[i+1];
}
void PushFront(int elem) {
IntVector TempIntVector(this->size_);
for (int i = 0; i < this->size_; ++i) TempIntVector.data_[i] = this->data_[i];
delete [] this->data_;
size_++;
data_ = new int[size_];
for (int i = 0; i < size_-1; ++i) data_[i+1] = TempIntVector.data_[i];
this->At(0) = elem;
}
void PopFront() {
IntVector TempIntVector(this->size_);
for (int i = 0; i < this->size_; ++i) TempIntVector.data_[i] = this->data_[i];
delete [] this->data_;
size_--;
data_ = new int[size_];
for (int i = 0; i < size_; ++i) data_[i] = TempIntVector.data_[i+1];
}
void Clear() {
for (int i = 0; i < this->size_; ++i) data_[i] = 0;
}
void PushBack(int elem) {
IntVector TempIntVector(this->size_);
for (int i = 0; i < this->size_; ++i) TempIntVector.data_[i] = this->data_[i];
delete [] this->data_;
size_++;
data_ = new int[size_];
for (int i = 0; i < size_-1; ++i) data_[i] = TempIntVector.data_[i];
this->At(size_-1) = elem;
}
void PopBack() {
IntVector TempIntVector(this->size_);
for (int i = 0; i < this->size_; ++i) TempIntVector.data_[i] = this->data_[i];
delete [] this->data_;
size_--;
data_ = new int[size_];
for (int i = 0; i < size_; ++i) data_[i] = TempIntVector.data_[i];
}
int &operator[](int i) { return At(i); }
int operator[](int i) const { return At(i); }
private:
int size_;
int *data_;
};
