91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何用C++實現自己的容器類

c++
小樊
82
2024-08-29 18:38:08
欄目: 編程語言

在C++中,你可以通過繼承標準庫中的容器類(例如std::vectorstd::list等)或者從頭開始創建一個新的容器類。這里我將給出一個簡單的示例,展示如何從頭開始創建一個基本的動態數組(類似于std::vector):

#include<iostream>
#include<algorithm> // for std::copy
#include <stdexcept> // for std::out_of_range

template<typename T>
class MyVector {
public:
    MyVector() : data(nullptr), size(0), capacity(0) {}

    ~MyVector() {
        delete[] data;
    }

    // 復制構造函數
    MyVector(const MyVector& other) {
        data = new T[other.capacity];
        std::copy(other.data, other.data + other.size, data);
        size = other.size;
        capacity = other.capacity;
    }

    // 賦值運算符
    MyVector& operator=(const MyVector& other) {
        if (this != &other) {
            delete[] data;
            data = new T[other.capacity];
            std::copy(other.data, other.data + other.size, data);
            size = other.size;
            capacity = other.capacity;
        }
        return *this;
    }

    // 獲取元素
    T& operator[](size_t index) {
        if (index >= size) {
            throw std::out_of_range("Index out of range");
        }
        return data[index];
    }

    const T& operator[](size_t index) const {
        if (index >= size) {
            throw std::out_of_range("Index out of range");
        }
        return data[index];
    }

    // 添加元素
    void push_back(const T& value) {
        if (size == capacity) {
            reserve(capacity == 0 ? 1 : capacity * 2);
        }
        data[size++] = value;
    }

    // 預分配內存
    void reserve(size_t newCapacity) {
        if (newCapacity > capacity) {
            T* newData = new T[newCapacity];
            std::copy(data, data + size, newData);
            delete[] data;
            data = newData;
            capacity = newCapacity;
        }
    }

    // 獲取當前大小
    size_t getSize() const {
        return size;
    }

    // 獲取當前容量
    size_t getCapacity() const {
        return capacity;
    }

private:
    T* data;
    size_t size;
    size_t capacity;
};

int main() {
    MyVector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    for (size_t i = 0; i < vec.getSize(); ++i) {
        std::cout<< vec[i] << " ";
    }
    std::cout<< std::endl;

    return 0;
}

這個示例展示了一個簡單的動態數組類MyVector,它支持添加元素、獲取元素、預分配內存等基本操作。你可以根據需要擴展這個類,添加更多的功能和優化性能。

0
普格县| 集安市| 怀远县| 抚远县| 昌图县| 寻甸| 丰都县| 延吉市| 巨鹿县| 磐石市| 永定县| 喀喇沁旗| 泌阳县| 余干县| 建昌县| 嘉义市| 民丰县| 仙游县| 永康市| 文昌市| 宜良县| 金山区| 微山县| 鱼台县| 迁安市| 澎湖县| 乌什县| 苏尼特右旗| 双鸭山市| 永胜县| 工布江达县| 清涧县| 万宁市| 扎兰屯市| 饶阳县| 出国| 南宁市| 阿拉善盟| 长沙市| 苍溪县| 固阳县|