自定义结构体:
struct edge{
int u,v,w;
bool used;
edge(int u,int v,int w):u(u),v(v),w(w),used(false){}
};
下面有三种不同的遍历方式:
1、常量引用遍历
for(const edge& e:est){
cout<<e.u<<' '<<e.v<<' '<<e.w<<' '<<e.used<<endl;
}
-
这是只读操作(如打印、计算值)
-
直接访问内存,不会发生拷贝结构体较大时优先使用(避免拷贝开销)
-
推荐作为默认选择(安全且高效),现代C++推荐写法
2、非常量引用遍历
for(edge& e:est){
cout<<e.u<<' '<<e.v<<' '<<e.w<<' '<<e.used<<endl;
e.used=true; //可对est容器的数据进行修改
}
-
需要修改容器元素(如更新标志位、重置状态)
-
需要避免拷贝的大结构体操作
3、值传递遍历
for(edge e:est){
cout<<e.u<<' '<<e.v<<' '<<e.w<<' '<<e.used<<endl;
e.used = true; // 只修改副本,不影响原容器
}
-
需要独立修改临时副本且不影响原数据
-
结构体非常小(如小于16字节)时可用
-
不推荐用于大结构体或频繁遍历场景
4、使用建议:
1、首选 const auto&
for (const auto& e : est) { ... } // 现代C++推荐写法
2、需修改元素时用 auto&
for (auto& e : est) {
e.used = true; // 直接修改容器内元素
}
2673

被折叠的 条评论
为什么被折叠?



