#include #include "section5b_old.h" IntArrayList::IntArrayList() : cap_(10), size_(0) { arr_ = new int[cap_]; } IntArrayList::IntArrayList(IntArrayList& rhs) : cap_(rhs.cap_), size_(rhs.size_) { arr_ = new int[cap_]; memcpy(arr_, rhs.arr_, size_); } IntArrayList::IntArrayList(const int* const arr, size_t size) : cap_((size + 1) * 2), size_(size) { arr_ = new int[cap_]; memcpy(arr_, arr, size); } IntArrayList::IntArrayList(size_t size) : cap_((size + 1) * 2), size_(size) { arr_ = new int[cap_]; } IntArrayList::~IntArrayList() { delete [] arr_; } IntArrayList& IntArrayList::operator=(const IntArrayList& rhs) { if (this != &rhs) { if (rhs.size_ > cap_) { delete [] arr_; arr_ = new int[rhs.cap_]; cap_ = rhs.cap_; } size_ = rhs.size_; memcpy(arr_, rhs.arr_, size_); } return *this; } int& IntArrayList::operator[](size_t indx) { if (indx >= size_) { throw; } return arr_[indx]; } IntArrayList& IntArrayList::operator+=(size_t n) { if (size_ == cap_) { cap_ = (cap_ + 1) * 2; int* tmp = new int[cap_]; memcpy(tmp, arr_, size_); delete [] arr_; arr_ = tmp; } arr_[size_] = n; size_++; return *this; } std::ostream& operator<<(std::ostream& ostr, IntArrayList& rhs) { ostr << "["; for (size_t i = 0; i < (size_ - 1); i++) { ostr << rhs.arr_[i] << ", "; } if(size_ > 0) ostr << rhs.arr_[size_ - 1]; ostr << "]"; return ostr; }