需要帮助理解std :: find算法

时间:2016-06-29 02:20:18

标签: c++ algorithm find std

我正在使用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是要处理的节点列表。

感谢您的时间和帮助。

1 个答案:

答案 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);