#include #include // for memcpy #include "IntArrayList.h" static const int DEFAULT_SIZE = 10; IntArrayList::IntArrayList() : len_(0), maxsize_(DEFAULT_SIZE) { array_ = new int[maxsize_]; } IntArrayList::IntArrayList(const int * const arr, size_t len) : len_(len), maxsize_(len * 2) { array_ = new int[maxsize_]; memcpy(array_, arr, len * sizeof(int)); } IntArrayList::IntArrayList(const IntArrayList &rhs) : len_(rhs.len_), maxsize_(rhs.maxsize_) { array_ = new int[maxsize_]; memcpy(array_, rhs.array_, len_ * sizeof(int)); } IntArrayList::~IntArrayList() { delete [] array_; } IntArrayList& IntArrayList::operator=(const IntArrayList &rhs) { if (this != &rhs) { len_ = rhs.len_; maxsize_ = rhs.maxsize_; delete [] array_; array_ = new int[maxsize_]; memcpy(array_, rhs.array_, len_ * sizeof(int)); } return *this; } int& IntArrayList::operator[](size_t n) { if (n < len_) return array_[n]; else throw; } IntArrayList& IntArrayList::operator+=(int val) { array_[len_] = val; len_++; if (len_ == maxsize_) { int *tmparr = array_; maxsize_ *= 2; array_ = new int[maxsize_]; memcpy(array_, tmparr, len_ * sizeof(int)); delete [] tmparr; } return *this; } std::ostream& operator<<(std::ostream& ostr, const IntArrayList &rhs) { ostr << "["; for (int i = 0; i < rhs.len_ - 1; i++) { ostr << rhs.array_[i] << ", "; } if (rhs.len_ > 0) ostr << rhs.array_[rhs.len_ - 1]; ostr << "]"; return ostr; }