#include <iostream>
#include <vector>
class DynamicArray {
private:
std::vector<int> arr;
public:
// 默认构造函数
DynamicArray() {}
// 析构函数
~DynamicArray() {}
// 构造函数,使用初始化列表
DynamicArray(std::initializer_list<int> init_list) : arr(init_list) {
std::cout << "Constructed with initializer list." << std::endl;
}
// 复制构造函数
DynamicArray(const DynamicArray& other) : arr(other.arr) {
std::cout << "Copy constructor called." << std::endl;
}
// 移动构造函数
DynamicArray(DynamicArray&& other) : arr(std::move(other.arr)) {
std::cout << "Move constructor called." << std::endl;
}
// 拷贝赋值运算符
DynamicArray& operator=(const DynamicArray& other) {
if (this == &other) {
return *this;
}
arr = other.arr;
std::cout << "Copy assignment operator called." << std::endl;
return *this;
}
// 移动赋值运算符
DynamicArray& operator=(DynamicArray&& other) {
if (this == &other) {
return *this;
}
arr = std::move(other.arr);
std::cout << "Move assignment operator called." << std::endl;
return *this;
}
// 在数组末尾添加元素
void push_back(int value) {
arr.push_back(value);
}
// 打印数组元素
void print() const {
for (const auto& element : arr) {
std::cout << element << " ";
}
std::cout << std::endl;
}
// 获取数组大小
size_t size() const {
return arr.size();
}
// 访问元素
int operator[](size_t index) const {
return arr[index];
}
};
int main() {
// 使用初始化列表创建对象
DynamicArray arr1 = {1, 2, 3, 4, 5};
std::cout << "arr1: ";
arr1.print();
// 复制构造
DynamicArray arr2 = arr1;
std::cout << "arr2 (copy of arr1): ";
arr2.print();
// 移动构造
DynamicArray arr3 = std::move(arr1);
std::cout << "arr3 (moved from arr1): ";
arr3.print();
std::cout << "arr1 after move: ";
arr1.print();
// 拷贝赋值
DynamicArray arr4;
arr4 = arr2;
std::cout << "arr4 (copy assigned from arr2): ";
arr4.print();
// 移动赋值
DynamicArray arr5;
arr5 = std::move(arr2);
std::cout << "arr5 (moved from arr2): ";
arr5.print();
std::cout << "arr2 after move: ";
arr2.print();
// 添加元素
arr3.push_back(6);
std::cout << "arr3 after adding an element: ";
arr3.print();
return 0;
}