Boost捆绑属性:是否需要初始化每条边的全部属性?
Boost图捆绑属性:无需初始化全部边属性
嘿,这个问题问到点子上了——Boost图的捆绑属性设计本身就支持只初始化你需要的属性,不用强制设置所有成员,你的代码写法完全没问题!
为什么可以这么做?
当你调用add_edge(u, v, graph)(不带属性参数)添加边时,Boost会自动为你的EdgeProperty结构体执行默认初始化。对于C++的基本数据类型:
double默认值是0.0int默认值是0bool默认值是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




