Давайте сначала отложим стражу.С точки зрения сложности кода, для ответа в ltjax он предоставляет нам код
for (iterator i=list.begin(); i!=list.end(); ++i) // first branch here
{
if (*i == x) // second branch here
return i;
}
return list.end();
Код может быть лучше сформирован как:
auto iter = list.begin();
while(iter != list.end() && *iter != x)
++iter;
return iter;
Из-за загроможденных (сгруппированных) условие завершения цикла, можно легко увидеть условие завершения цикла без запоминания всех условий завершения цикла при прохождении через тело цикла, чтобы понять правильность, и ввести меньше.Однако помните о схеме bool.
Дело в том, что используемый здесь страж не для уменьшения сложности кода, а для того, чтобы уменьшить проверку индекса в каждом цикле.Для линейного поиска мы начинаем с проверки, является ли индекс допустимым диапазоном, и если в, то проверяем, соответствует ли значение тому, что мы хотим, без использования sentinel.Но с часовым, который находится в конце с желаемым значением, мы можем обойтись без проверки границы индекса, а только с проверкой значения, поскольку цикл гарантированно завершится.Это относится к управляемому дозорному циклу: повторяйте до тех пор, пока не увидите желаемое значение.
Рекомендуем прочитать: Введение в алгоритмы, третье издание, и если у вас есть формат pdf, просто найдите ключевое слово sentinel, чтобы получить все.На самом деле, этот пример такой лаконичный и интригующий.Обсуждения о том, как охотиться на слона и слона в Каире, могут вас заинтересовать.Конечно, я не говорю об охоте на слонов в реальности.