Итак, у меня есть код C ++ для узлов обратного отслеживания в алгоритме BFS. Это выглядит примерно так:
typedef std::map<int> MapType;
bool IsValuePresent(const MapType& myMap, int beginVal, int searchVal)
{
int current_val = beginVal;
while (true)
{
if (current_val == searchVal)
return true;
MapType::iterator it = myMap.find(current_val);
assert(current_val != myMap.end());
if (current_val == it->second) // end of the line
return false;
current_val = it->second;
}
}
Однако, while (true)
кажется ... мне подозрительным. Я знаю, что этот код работает, и логически я знаю, что он должен работать. Однако я не могу избавиться от ощущения, что в while
должно быть какое-то условие, но на самом деле единственно возможное - это использовать переменную bool
, просто чтобы сказать, выполнено ли это. Должен ли я перестать беспокоиться? Или это действительно плохая форма.
EDIT : Спасибо всем, кто заметил, что есть способ обойти это. Однако я все еще хотел бы знать, есть ли другие действительные случаи.