【问题标题】:boost intrusive get next directly from nodeboost intrusive 直接从节点获取下一个
【发布时间】:2018-12-17 13:11:57
【问题描述】:

是否可以直接从节点/元素获取下一个节点/元素?像这样:

struct Data{
   boost::intrusive::list_member_hook<> node;

   Data* get_next(){
       node.get_next() ???
   }
}

【问题讨论】:

    标签: c++ boost boost-intrusive


    【解决方案1】:

    许多 boost 侵入式容器都有一个静态成员函数 s_iterator_to 可以直接从值中获取迭代器。

    因此你可以得到一个迭代器然后使用迭代器接口:

    struct Data{
       boost::intrusive::list_member_hook<> node;
    
       inline Data* get_next();
    }
    
    namespace bis = boost::intrusive;
    
    using List = bis::list<Data,
            bis::member_hook<Data, bis::list_member_hook<>, &Data::node>
          >;
    
    Data* Data::get_next() {
        return &*++List::s_iterator_to(*this);
    }
    

    Live Demo

    【讨论】:

    • 终端节点呢?如果没有下一个节点,get_next() 应该返回 null_ptr
    • @tower120 这是不可能的。侵入式列表使用头节点作为哨兵。入口节点本身没有足够的信息来确定它是否是终端。节点不是空终止的。
    猜你喜欢
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    相关资源
    最近更新 更多