В этом примере, как в большинстве случаев, последовательность содержит все элементы контейнера (в данном случае вектора). Мы сравниваем возвращенный итератор с концом последовательности, чтобы узнать, найден ли искомый элемент.
Также возможно вы думаете, что такая тема как http://medlux75.ru/?page_id=32 никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт medlux75.ru - там можно узнать много интересного про то, где выбрать гинекологию из множества, и сколько стоит гинекология.
Что означает вообще гинекология, где находится гинекология - про это написано на сайте пол гинекологию.
Это важная для многих тема - гинекология Спасибо сайту medlux75.ru за информацию про то, где есть гинекология
Теперь мы знаем, как используется алгоритм find() , а также группу аналогичных алгоритмов, основанных на тех же соглашениях. Однако, прежде чем переходить к другим алгоритмам, внимательнее посмотрим на определение алгоритма find() .
template
In find(In first, In last, const T& val)
// находит первый элемент в последовательности [first,last),
// равный val
{
while (first!=last && *first != val) ++first; return first;
}
Вы полагаете, что этот цикл вполне тривиален? Мы так не думаем. На самом деле это минимальное, эффективное и непосредственное представление фундаментального алгоритма. Однако, пока мы не рассмотрим несколько примеров, это далеко не очевидно. Сравним несколько версий алгоритма.
template
In find(In first, In last, const T& val)
// находит первый элемент в последовательности [first,last),
// равный val
{
for (In p = first; p!=last; ++p) if (*p == val) return p; return last;
}
Эти два определения логически эквивалентны, и хороший компилятор сгенерирует для них обоих одинаковый код. Однако на практике многие компиляторы не настолько хороши, чтобы устранить излишнюю переменную (p) и перестроить код так, чтобы все проверки выполнялись в одном месте. Зачем это нужно? Частично потому, что стиль первой (рекомендуемой) версии алгоритма find() стал очень популярным, и мы должны понимать его, чтобы читать чужие программы, а частично потому, что для небольших функций, работающих с большими объемами данных, большее значение имеет эффективность.
Уверены ли вы, что эти два определения являются логически эквивалентными? Почему?
Попробуйте привести аргументы в пользу их эквивалентности. Затем примените оба алгоритма к одному и тому же набору данных. Знаменитый специалист по компьютерным наукам Дон Кнут ((Don Knuth) однажды сказал: “Я только доказал, что алгоритм является правильным, но я его не проверял”. Даже математические доказательства содержат ошибки. Для того чтобы убедиться в своей правоте, нужно иметь как доказательства, так и результаты тестирования.
|