#include #include #include class array { int *data{nullptr}; size_t n{0}; public: ~array() { delete [] data; } array() : array(0) {} array(const array &obj) { data = new int[obj.n]; n = obj.n; for (size_t i = 0; i < n; i++) { data[i] = obj.data[i]; } } explicit array(size_t m) { if (m == 0) m = 10; n = m; data = new int[n]; for (size_t i = 0; i < n; i++) { data[i] = 0; } } array(int *p, size_t count) { if (p != nullptr && count != 0) { data = p; n = count; } else { // copy-and-swap auto tmp = array(); swap(tmp); } } array(const std::initializer_list &l) { n = l.size(); data = new int[n]; std::copy(l.begin(), l.end(), data); } void swap(array& obj) { std::swap(n, obj.n); std::swap(data, obj.data); } friend std::ostream& operator <<( std::ostream& os, const array& obj ) { for (size_t i = 0; i < obj.n; ++i) os << obj.data[i] << " "; return os; } int get(size_t i) { assert(data != nullptr); return data[i]; } }; #include #include int main() { array a(5); std::array b; std::vector c(5, 1); for (auto &&e : c) std::cout << e << " "; std::cout << "\n"; c.push_back(2); for (auto &&e : c) std::cout << e << " "; return 0; }