You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Boost捆绑属性:是否需要初始化每条边的全部属性?

Boost图捆绑属性:无需初始化全部边属性

嘿,这个问题问到点子上了——Boost图的捆绑属性设计本身就支持只初始化你需要的属性,不用强制设置所有成员,你的代码写法完全没问题!

为什么可以这么做?

当你调用add_edge(u, v, graph)(不带属性参数)添加边时,Boost会自动为你的EdgeProperty结构体执行默认初始化。对于C++的基本数据类型:

  • double默认值是0.0
  • int默认值是0
  • bool默认值是false

那些你暂时用不到的属性会被赋予这些默认值,之后如果需要用到它们,再随时赋值就行。

你的代码示例是有效的

你给出的这段代码完全可以正常工作:

struct EdgeProperty { 
    double weight; 
    int index; 
    int property_thats_only_used_sometimes; 
    bool property_thats_only_used_sometimes2; 
}; 

// 完全可行的写法
edge_descriptor edge = add_edge(u, v, graph).first; 
graph[edge].weight = 5; 
graph[edge].index = 1; 

可选优化:自定义默认值

如果你担心默认值可能带来意外(比如不小心访问了未手动设置的属性,拿到0值却误以为是有效数据),可以给结构体成员设置类内初始值,让默认状态更清晰:

struct EdgeProperty { 
    double weight = 0.0; 
    int index = -1; // 用-1标记未初始化的索引
    int property_thats_only_used_sometimes = -1; 
    bool property_thats_only_used_sometimes2 = false; 
};

这种方式既保留了灵活性,又能避免潜在的误读问题,算是个实用的小技巧。

内容的提问来源于stack exchange,提问作者Jamo

火山引擎 最新活动