§ 20. Использование библиотечных функций для сортировки и поиска данных
20.1. Линейный поиск элемента
Для организации линейного поиска элемента в массиве можно использовать следующие функции:
У всех этих функций три параметра. Первые два параметра являются итераторами, которые определяют диапазон для поиска в массиве, третий задает условие поиска. При этом левая граница диапазона входит в область поиска, а правая — нет. То есть диапазон поиска является полуинтервалом. Если поиск осуществляется во всем векторе, то используются итераторы begin() и end(). В качестве результата функции find и find_if выдают значение итератора, указывающего на первый элемент, соответствующий поисковому запросу. Компаратор для функций, реализующих поиск элемента в диапазоне, имеет один параметр. Компаратор возвращает значение true, если элемент удовлетворяет условию поиска, и false, если нет. Функция поиска передает в компаратор поочередно значения из диапазона поиска. Как только для какого-то значения получили true, работа поисковой функции прекращается. Если элемент не найден, функция возвращает итератор на правую границу области поиска. Пример 20.1. Дан линейный массив целых чисел. Написать программу, которая: 1) найдет позицию элемента, равного x; 2) найдет позицию элемента, кратного x; 3) посчитает количество элементов, равных x; 4) посчитает количество элементов, кратных x. Этапы выполнения задания I. Исходные данные: переменные n — количество чисел в массиве, a — массив. II. Результат: позиции элементов n1 и n2 (пункты 1 и 2) и количество элементов k1 и k2 (пункты 3 и 4). III. Алгоритм решения задачи. 1. Ввод исходных данных. Данные сгенерируем случайным образом. 2.1. find для пункта 1. 3. Вывод результата. IV. Описание переменных: n, k1, k2, n1, n2, x – int, a – vector<int>. Функции min_element и max_element возвращают итератор на минимальное и максимальное значения элементов в диапазоне. Пример 20.2. Дан линейный массив целых чисел. Написать программу, которая найдет минимальный и максимальный элементы в массиве. Этапы выполнения задания I. Исходные данные: переменные n — количество чисел в массиве, a — массив. II. Результат: позиции минимального и максимального элементов nmin и nmax и их значения. III. Алгоритм решения задачи. 1. Ввод исходных данных. Данные сгенерируем случайным образом. |
V. Программа:
VI. Тестирование. Анализ результатов. Индекс числа 3 в массиве равен 1, а также это число кратно самому себе. В массиве одно число, равное 3, и два числа (3 и 18), кратных 3. Обратите внимание на то, что переменная x описана как глобальная переменная, поскольку она используется как в функции main, так и в компараторе comp. V. Программа:
VI. Тестирование. Функции min_element и max_element могут иметь третий параметр — компаратор, определяющий правило порядка для элементов указанного диапазона. |