我有这个迭代器循环,
typedef boost::unordered_map<std::pair<int, int>, NavigationNode> NodesMap;
NodesMap nodes;
for (NodesMap::iterator it= nodes.begin(); it != nodes.end() ; ++it)
{
if(it->second.type == NavigationNodeType_Walkable)
{
ConnectNode(&it->second);
}
}
ConnectNode 函数似乎使迭代器无效。它将新元素推送到导航节点内并修改导航节点的现有成员。
我有两个问题
- 将 it->second 作为指针传递是不好的吗?
- 迭代此容器的最佳方法是什么?
谢谢。
edit:
像这样访问容器的元素吗
nodes[intpair(x, y)]
ConnectNode函数里面会导致这个问题吗?
edit2是的,它确实。
这是为什么?我该如何解决它?
-
将 it->second 作为指针传递是不好的吗?
这取决于接受指针的函数本身的作用。单独来看,传递指针本身并没有什么错误。
-
迭代此容器的最佳方法是什么?
你使用的方式没问题。使用begin()
and end()
迭代是非常标准的。
所以我认为问题一定出在ConnectNode
,并且您很可能没有迭代器失效问题,而是其他问题。
“是否像这样访问容器的元素”
nodes[intpair(x, y)]
这将向地图添加一个带有密钥的新条目intpair(x,y)
不存在,所以是的,这可能会扰乱迭代。您可以通过在访问之前检查该键的元素是否存在来避免这种情况[]
操作员。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)