Итак, у меня есть код 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: Спасибо всем, что заметили, что есть способ обойти это. Тем не менее, мне все равно хотелось бы узнать, существуют ли другие действительные случаи.
Это также обсуждалось немного здесь. http://stackoverflow.com/questions/885908/ – Copas
Я не знаю. Бесконечные петли в плохом состоянии? –