首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查boost::侵扰性::没有容器的列表中的列表尾?

检查boost::侵扰性::没有容器的列表中的列表尾?
EN

Stack Overflow用户
提问于 2021-10-21 05:47:20
回答 1查看 181关注 0票数 1

我开始学习Boost.Intrusive,特别是对双链接列表(boost::intrusive::list)感兴趣。

在“手工滚动”链接列表中这样做很简单,但到目前为止,我还没有找到相应的助推功能:

给出了一个属于列表的节点,如何检查它是否表示列表的末尾,而不需要拥有的容器.

在手工制作的列表中,这就像检查"next“指针是否为空一样简单。

对于boost::intrusive::list,有一个s_iterator_to函数,它将一个普通节点转换为一个迭代器。您可以对照mylist.end()检查它,它提供了所需的结果,但它需要对列表容器本身的引用。

我还注意到,在这样一个迭代器上使用operator++只会产生一个垃圾值,当它被移过结束时-没有错误或从Boost中断言。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-23 20:34:42

经过更多的研究和思考,似乎没有办法用标准的boost::intrusive::list功能来做我想做的事情。

所提供的列表实际上是一个循环链表,而不是线性链表。因此,在末尾没有“空指针”。

该实现似乎遵循了类似于Linux内核的list.h的设计。您总是需要对容器对象的引用,因为它包含循环列表的"head“,它是一个不包含用户数据的特殊节点。这也是在遍历期间表示end()的节点。

至于为什么选择这个设计,我还没有找到任何确凿的证据。从表面上看,循环列表设计允许更简单的实现,分支更少。例如,请参见这篇旧文章,它说:“列表的循环特性使插入和删除节点变得简单而不需要分支。”

我并不完全相信这一点,因为我认为使用“指针到指针”样式处理也可以避免分支。但不管怎么说,在boost::intrusive::list中都是这样做的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69656454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档