我正在使用C ++。我使用std :: find算法在我的项目中使用了一段代码。它有效,但我不完全理解它。我希望有人可以帮助解释它,并将这个基本循环重写为基于循环的范围。我使用的代码是:
if (std::find(closedList.begin(), closedList.end(), c.m_next) == closedList.end())
{
openList.push_back(c.m_next);
}
我的理解是该算法在closedList的开头和结尾之间搜索c.m_next(使用< list>容器的列表)。我试着把它重写为:
for (Node* node : closedList)
{
if (node == c.m_next)
{
openList.push_back(node);
}
}
但是当我为每个循环重写时,我的代码不起作用。对我来说,这些看起来一样。我是否正确理解了std :: find算法?如果没有,有人可以通过将其重写为某种for循环来帮助解释它吗?
在代码的情况下,c是边列表中的边。 c.m_next是边的目标节点。 closedList是要处理的节点列表。
感谢您的时间和帮助。
答案 0 :(得分:1)
如果原始代码不在封闭列表中,则将“node”添加到openList。如果openList位于closedList中,您的代码会将“node”添加到openList中。
如果没有元素匹配,则该函数最后返回。
http://www.cplusplus.com/reference/algorithm/find/
您希望这与每个循环的行为匹配。
bool isInClosedList = false;
for (Node* node : closedList)
{
if (node == c.m_next)
{
isInClosedList = true;
break;
}
}
if (!isInClosedList)
openList.push_back(node);