MST

星途 面试题库

面试题:C++ 自定义动态数组类实现

请设计并实现一个自定义的动态数组类 MyDynamicArray,要求支持动态扩容、元素访问、迭代器遍历等功能,同时要考虑内存管理、性能优化以及与标准库容器的兼容性。请给出完整的类定义、成员函数实现以及必要的测试代码。
16.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#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;
}