#include <iostream>
#include <memory>
#include <algorithm>
#include <iterator>
template <typename T>
class MyDynamicArray {
private:
T* data;
size_t capacity;
size_t size_;
void resize() {
capacity *= 2;
std::unique_ptr<T[]> newData(new T[capacity]);
std::copy(data, data + size_, newData.get());
std::swap(data, newData.get());
}
public:
class iterator {
private:
T* ptr;
public:
iterator(T* p) : ptr(p) {}
T& operator*() { return *ptr; }
iterator& operator++() { ++ptr; return *this; }
iterator operator++(int) { iterator temp = *this; ++ptr; return temp; }
bool operator!=(const iterator& other) const { return ptr != other.ptr; }
};
MyDynamicArray() : capacity(2), size_(0) {
data = new T[capacity];
}
~MyDynamicArray() {
delete[] data;
}
void push_back(const T& value) {
if (size_ == capacity) {
resize();
}
data[size_++] = value;
}
T& operator[](size_t index) {
return data[index];
}
const T& operator[](size_t index) const {
return data[index];
}
size_t size() const {
return size_;
}
iterator begin() {
return iterator(data);
}
iterator end() {
return iterator(data + size_);
}
};
// 测试代码
int main() {
MyDynamicArray<int> arr;
arr.push_back(1);
arr.push_back(2);
arr.push_back(3);
for (MyDynamicArray<int>::iterator it = arr.begin(); it != arr.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
for (size_t i = 0; i < arr.size(); ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}