#pragma once #include template class SVector { private: size_t stored = 0; char buff[sizeof(T)*size]; T *array = (T*)buff; public: T* data() { return array; } T& operator[](size_t i) { return array[i]; } T& at(size_t i) { return array[i]; } T& front() { return array[0]; } T& back() { return array[stored-1]; } bool empty() const { return stored == 0 ? true : false; } size_t count() const { return stored; } constexpr size_t maxSize() const { return size; } size_t remainingCapacity() const { return size - stored; } bool push_back(const T in) { if(remainingCapacity() != 0) { array[stored] = in; ++stored; return true; } else return false; } bool erase(size_t position) { if(position > stored) return false; array[position].~T(); --stored; for( size_t i = position; i < stored; i++ ) memcpy(&array[i], &array[i+1], sizeof(T)); return true; } void clear() { for( size_t i = 0; i < stored; i++ ) array[i].~T(); stored = 0; } };