#pragma once #include template class Vector { public: Vector(unsigned int Size=0,T init=NULL); void Resize(unsigned int newSize,T init=NULL); void PushBack(T a); ~Vector(); unsigned int GetSize() { return m_size; }; T& operator[](int index); private: unsigned int m_size; T* m_data =nullptr; }; template Vector::Vector(unsigned int Size, T init ) :m_size(Size) { m_data = new T[m_size]; for (size_t i = 0; i < m_size; i++) { m_data[i] = init; } } template void Vector::Resize(unsigned int newSize,T init) { if (newSize == m_size) return; T* temp = m_data; m_data = new T[newSize]; for (size_t i = 0; i < newSize; i++) { if (i < m_size) m_data[i] = temp[i]; else m_data[i] = init; } m_size = newSize; delete[] temp; } template void Vector::PushBack(T a) { Resize(m_size + 1); m_data[m_size-1] = a; } template Vector::~Vector() { delete[] m_data; } template T& Vector::operator[](int index) { if (index >= m_size) { std::cout << "Array index out of bound, exiting"; exit(0); } return m_data[index]; } template std::ostream& operator<< (std::ostream& out, Vector& a) { unsigned int len = a.GetSize(); for (size_t i = 0; i < len; i++) { out << a[i] ; if (i < len - 1) out << ','; } return out; }