编写一个STL兼容容器 - 隐含要求
创始人
2024-12-07 10:00:20
0

要编写一个STL兼容的容器,需要满足一些隐含要求。下面是一个示例解决方法,以编写一个简单的STL兼容的动态数组容器为例。

#include 
#include 
#include 

template 
class MyVector {
private:
    T* data;
    size_t size;
    size_t capacity;

public:
    MyVector() : data(nullptr), size(0), capacity(0) {}

    ~MyVector() {
        delete[] data;
    }

    size_t Size() const {
        return size;
    }

    bool Empty() const {
        return size == 0;
    }

    T& operator[](size_t index) {
        return data[index];
    }

    const T& operator[](size_t index) const {
        return data[index];
    }

    void PushBack(const T& value) {
        if (size >= capacity) {
            size_t newCapacity = capacity == 0 ? 1 : capacity * 2;
            Reserve(newCapacity);
        }
        data[size++] = value;
    }

    void PopBack() {
        if (!Empty()) {
            --size;
        }
    }

    void Reserve(size_t newCapacity) {
        if (newCapacity <= capacity) {
            return;
        }

        T* newData = new T[newCapacity];
        std::copy(data, data + size, newData);
        delete[] data;
        data = newData;
        capacity = newCapacity;
    }

    void Resize(size_t newSize) {
        Reserve(newSize);
        size = newSize;
    }

    class iterator {
    private:
        T* ptr;

    public:
        using iterator_category = std::random_access_iterator_tag;
        using value_type = T;
        using difference_type = std::ptrdiff_t;
        using pointer = T*;
        using reference = T&;

        iterator(T* p) : ptr(p) {}

        iterator& operator++() {
            ++ptr;
            return *this;
        }

        iterator operator++(int) {
            iterator temp = *this;
            ++ptr;
            return temp;
        }

        iterator& operator--() {
            --ptr;
            return *this;
        }

        iterator operator--(int) {
            iterator temp = *this;
            --ptr;
            return temp;
        }

        iterator& operator+=(size_t n) {
            ptr += n;
            return *this;
        }

        iterator operator+(size_t n) const {
            iterator temp = *this;
            return temp += n;
        }

        iterator& operator-=(size_t n) {
            ptr -= n;
            return *this;
        }

        iterator operator-(size_t n) const {
            iterator temp = *this;
            return temp -= n;
        }

        difference_type operator-(const iterator& rhs) const {
            return ptr - rhs.ptr;
        }

        reference operator*() const {
            return *ptr;
        }

        pointer operator->() const {
            return ptr;
        }

        reference operator[](size_t index) const {
            return ptr[index];
        }

        bool operator==(const iterator& rhs) const {
            return ptr == rhs.ptr;
        }

        bool operator!=(const iterator& rhs) const {
            return !(*this == rhs);
        }

        bool operator<(const iterator& rhs) const {
            return ptr < rhs.ptr;
        }

        bool operator>(const iterator& rhs) const {
            return ptr > rhs.ptr;
        }

        bool operator<=(const iterator& rhs) const {
            return ptr <= rhs.ptr;
        }

        bool operator>=(const iterator& rhs) const {
            return ptr >= rhs.ptr;
        }
    };

    iterator begin() {
        return iterator(data);
    }

    iterator end() {
        return iterator(data + size);
    }
};

int main() {
    MyVector vec;
    vec.PushBack(1);
    vec.PushBack(2);
    vec.PushBack(3);

    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

这个示例实现了一个简单的动态数组容器MyVector,具有STL兼容的功能,包括Size()Empty()operator[]PushBack()PopBack()Reserve()Resize()begin()end()等成员函数。还实现了一个嵌套的iterator类,用于支持迭代器访

相关内容

热门资讯

两分钟了解!蜀山四川麻将有挂吗... 两分钟了解!蜀山四川麻将有挂吗,大宝麻将辅助器app,可靠技巧(有挂辅助);1、该软件可以轻松地帮助...
两分钟了解!衢州都莱辅助器,牌... 两分钟了解!衢州都莱辅助器,牌乐门手机麻将有什么,2025新版技巧(有挂技巧)1、下载好牌乐门手机麻...
五分钟了解!福建十三水软件开发... 五分钟了解!福建十三水软件开发,八闽十三张软件,AI教程(有挂普及)1、超多福利:超高返利,海量正版...
6分钟了解!途乐棋牌这个平台靠... 6分钟了解!途乐棋牌这个平台靠谱吗,中至麻将可以设置输赢吗,必赢方法(有挂脚本)1、操作简单,无需注...
四分钟了解!快玩炸翻天辅助器,... 四分钟了解!快玩炸翻天辅助器,星悦广东麻将有没有挂,普及教程(有挂揭秘)1、星悦广东麻将有没有挂系统...
九分钟了解!掌酷十三张系统规律... 九分钟了解!掌酷十三张系统规律,掌电竞技真的能赢吗,大神讲解(有挂揭秘);1、玩家可以在掌电竞技真的...
9分钟了解!蛮籽重庆麻将有没有... 9分钟了解!蛮籽重庆麻将有没有挂,八闽十三张有外挂吗,必胜教程(有挂解密)1、上手简单,内置详细流程...
8分钟了解!微信牵手跑得快小程... 8分钟了解!微信牵手跑得快小程序辅助器免费,牌乐门如何拿到好牌,技巧教程(有挂透明);1、每一步都需...
两分钟了解!老友游戏辅助器,财... 两分钟了解!老友游戏辅助器,财神13张 辅助器,2025新版教程(有挂工具)财神13张 辅助器辅助器...
二分钟了解!新玉海楼茶苑有没有... 二分钟了解!新玉海楼茶苑有没有外 挂,牵手互娱有挂吗,详细教程(有挂普及)小薇(透视辅助)致您一封信...