用c++实现如下代码:编写一个变长数组,要实现复制构造、移动构造和拷贝构造

#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;
}

 

posted @ 2025-01-20 11:03  AI_Engineer  阅读(12)  评论(0)    收藏  举报