1
假设我在这样的方式限定的曲线图,循环通过经由迭代器C中的阵列++
unordered_map<int, unordered_set<int>> graph = {
{ 0, { 1, 2, 3 } },
{ 1, { 3, 4, 5 } },
{ 2, { 6, 5, 4 } }
};
我要清空散列集图表中的每个条目的。我在这里做两个选项,
A. for(auto v = graph.begin(); v != graph.end(); ++v) v->second.clear();
B. for(auto v : graph) v.second.clear();
我看到一个作品,但B没有。我不太明白。我的理论是,B在做的方式,v是实际元素的副本。所以它不能清除实际的散列集合。
需要帮助。谢谢!
谢谢,它的工作原理!我还有一个问题。根据我的测试,for(auto&v:graph)的运行时间比(auto v:graph)长。我很困惑。第一种方法不需要复制图形,v只是一个参考。对我来说更有意义的是第二个跑得更长。 – CodingFanSteve
我可能看到更长的时间是由于目前服务器更忙。 – CodingFanSteve
@ CodingForFun15也许编译器可以推断清除临时副本对程序没有影响,所以它决定完全删除循环。 – user2079303