#ifndef VECTOR_H #define VECTOR_H #include #include inline void *operator new(size_t, void *p) throw() { return p; } inline void *operator new[](size_t, void *p) throw() { return p; } inline void operator delete(void *, void *) throw() { } inline void operator delete[](void *, void *) throw() { } namespace std { template class vector { public: vector(); vector(int capacity); vector(const vector &other); ~vector(); bool empty() const; int size() const; int capacity() const; void push_back(const T &data); void pop_back(); T &back(); T &front(); void remove(int index); void clear(); void resize(int new_capacity); T &operator[](int index) const; private: T *array; int _capacity; int _size; }; template vector::vector() { _size = 0; _capacity = 8; array = malloc(sizeof(T) * _capacity); memset((void *)array, 0, sizeof(T) * _capacity); // array = new T[_capacity]; } template vector::vector(int capacity) { _size = 0; _capacity = capacity; array = malloc(sizeof(T) * _capacity); memset((void *)array, 0, sizeof(T) * _capacity); // array = new T[_capacity]; } template vector::vector(const vector &other) { _size = other.size(); _capacity = other.capacity(); array = malloc(sizeof(T) * _capacity); memset((void *)array, 0, sizeof(T) * _capacity); // array = new T[_capacity]; for (int i = 0; i < _size; i++) array[i] = other[i]; } template vector::~vector() { for (int i = 0; i < _size; i++) { array[i].~T(); } free(array); // if (array != nullptr) // delete[] array; } template bool vector::empty() const { return _size == 0; } template int vector::size() const { return _size; } template int vector::capacity() const { return _capacity; } template T &vector::operator[](int index) const { return array[index]; } template void vector::push_back(const T &data) { if (_size == _capacity) resize(_capacity * 2); new (&array[_size]) T(data); // array[_size] = data; _size++; } template void vector::pop_back() { array[_size - 1].~T(); _size--; } template T &vector::back() { return array[_size - 1]; } template T &vector::front() { return array[0]; } template void vector::remove(int index) { while (index < _size - 1) { array[index] = array[index + 1]; index++; } pop_back(); } template void vector::clear() { for (int i = 0; i < _size; i++) array[i].~T(); _size = 0; } template void vector::resize(int new_capacity) { _capacity = new_capacity; // T *temp = new T[_capacity]; T *temp = malloc(sizeof(T) * _capacity); memset((void *)temp, 0, sizeof(T) * _capacity); for (int i = 0; i < _size; i++) { new (&temp[i]) T(array[i]); // temp[i] = array[i]; } // delete[] array; free(array); array = temp; } } #endif