zeromq源码学习——array

本文介绍了一种由ZeroMQ实现的高效数组管理方法,该数组主要用于快速访问、插入及删除指针类型的元素,并通过特定模板类array_item_t来管理元素在数组中的索引。文章详细解释了如何使用std::vector来保存实际数据,并提供了插入和删除操作的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zeromq实现了一个可以快速访问,插入,删除的数组,该数组只保存指针类型。所有可以保存在数组中的元素需要继承自array_item_t<ID>。ID参数可以用于把同一个对象指针保存在不同的数组中。

//仅仅保存了该元素在数组中的索引
template <int ID = 0> class array_item_t
{
public:

    inline array_item_t () :array_index (-1)
    {
    }

    inline virtual ~array_item_t ()
    {
    }

    inline void set_array_index (int index_)
    {
        array_index = index_;
    }

    inline int get_array_index ()
    {
        return array_index;
    }

private:

    int array_index;

    array_item_t (const array_item_t&);
    const array_item_t &operator = (const array_item_t&);
};

数组array_t中真实数据保存在一个std::vector数组中:

typedef std::vector <T*> items_t;
items_t items;

插入数据,直接在数组最后压入:

inline void push_back (T *item_)
{
    if (item_)
        ((item_t*) item_)->set_array_index ((int) items.size ());
    items.push_back (item_);
}

主要是数据快速删除操作:

inline void erase (T *item_) {
    erase (((item_t*) item_)->get_array_index ());
}

inline void erase (size_type index_) {
    //将数组最后一个元素index设为要被移除位置
    if (items.back ())
        ((item_t*) items.back ())->set_array_index ((int) index_);
    //最后一个元素覆盖被移除数据
    items [index_] = items.back ();
    //移除最后一个元素
    items.pop_back ();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值