Boost Graph Library 学习笔记

最近研究了一下boost graph library(简称BGL)。由于文档的过于简略和使用者数量较少,一时半会弄明白还不是那么简单的一件事情。网上也有不少入门文章,这些我就不再说了,主要说一下我遇到的一些问题。

 

1. descriptor 和 iterator的区别

BGL里有2种迭代器性质的东西,分别是descriptor和iterator。在STL里只有一种迭代器,就是iterator。但是在BGL里,多出了一种叫descriptor的东西。原因在于,图是关系型的数据结构,是非线性的,要比STL里的线性容器复杂。在STL设计中,iterator就是作用于线性容器。在BGL里保留了iterator可以说是一种习惯吧。但是光有iterator的图结构是很复杂的,原因就在于iterator失效这么一个问题。在STL里,删除一个vector中的一个元素会使此元素后面的iterator失效。当然,这种失效在线性容器中还算可以容忍。但是在图里就不行了,考虑如下例子:3个点3条边的一个图的构建,按照BGL的方式首先定义出图类型G,然后定义G的对象g。首先我们加2个点进去:1,3两个点。然后通过add_edge加边。比如在1,3两点之间加边就是add_edge(1,3)。然后再加点2,再在2,3两点之间加边add_edge(2,3)。这里的参数都是vertex_descriptor,而不是vertex_iterator。如果是iterator,在你调用add_edge(2,3)时,这个3所代表的iterator可能是已经失效的!(因为在加点2的时候,3的位置往后移动了(假设是vector))这就是descriptor存在的意义。实际上,在BGL实现里面,descri

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值