#include "vec.h" #include #include #include Vec::Vec() : cap(INITIAL_LEN), w_idx(0), arr(nullptr) { std::cout << "Allocating vector" << std::endl; arr = new T[INITIAL_LEN]; } Vec::Vec(std::initializer_list il) : Vec() { for (auto &a : il) push_back(a); } Vec::~Vec() { std::cout << "De-allocating vector" << std::endl; if (arr) delete[] arr; } T &Vec::operator[](std::size_t idx) const noexcept { if (idx < w_idx) return arr[idx]; exit(1); } void Vec::push_back(const T &value) noexcept { arr[w_idx++] = value; if (w_idx == cap) { resize(cap * 2); } } std::size_t Vec::size() const { return w_idx; } std::size_t Vec::capacity() const noexcept { return cap; } void Vec::resize(std::size_t newsize) { std::cout << "Reallocating" << std::endl; T *newarr = new T[newsize]; std::memcpy(newarr, arr, w_idx); delete[] arr; arr = newarr; cap = newsize; } void Vec::pop_back() noexcept { --w_idx; } void Vec::clear() noexcept { #ifdef REALCLEAR delete[] arr; arr = new T[INITIAL_LEN]; cap = INITIAL_LEN; #endif w_idx = 0; }