Читаем Введение в стандартную библиотеку шаблонов C++. Описание, примеры использования, учебные задачи полностью

Во всех алгоритмах, связанных с копированием или перемещением данных, предполагается, что в результирующей последовательности зарезервировано достаточно места для размещения всех получаемых элементов.

Всюду при указании сложности алгоритма под N понимается разность итераторов distance(first, last) (если N имеет индекс, то подразумевается, что итераторы имеют такой же номер, например N1 = distance(first1, last1)). Если сложность алгоритма является постоянной, т. е. не зависит от размера обрабатываемой последовательности, то она не указывается.

1.3.3. Алгоритмы общего назначения

Алгоритмы, описываемые в данном пункте, определены в заголовочном файле .


screen_image_37_282_76


Находит первую пару соседних элементов из диапазона [first, last), которые равны (или, при наличии предиката pred(*p, *(p + 1)), для которых данный предикат возвращает true). Возвращает итератор, связанный с первым элементом найденной пары, или last, если пара не найдена.

Сложность линейная (не более N + 1 вызовов pred).


screen_image_37_365_76


Возвращает true, если все элементы диапазона [first, last) удовлетворяют предикату pred. В случае пустого диапазона также возвращается true.

Сложность линейная (не более N вызовов pred).


screen_image_37_427_76


Возвращает true, если хотя бы один элемент диапазона [first, last) удовлетворяет предикату pred. В случае пустого диапазона возвращается false.

Сложность линейная (не более N вызовов pred).


screen_image_37_490_76


Использует двоичный поиск для проверки того, содержится ли в диапазоне [first, last) значение value (если значение найдено, то возвращает true, иначе false). Содержимое диапазона должно быть предварительно отсортировано в соответствии с порядком, задаваемым предикатом comp(*p1, *p2) или (по умолчанию) операцией <.

Сложность логарифмическая (не более log N + 2 сравнений).


screen_image_38_103_60


Копирует элементы из [first, last) в диапазон, начинающийся с result, и возвращает позицию за последним скопированным элементом в полученном диапазоне. Итератор result не может находиться в исходном диапазоне [first, last), но другие части выходного диапазона могут накладываться на исходный диапазон. Таким образом, данный алгоритм можно применять для «копирования влево», т. е. копирования в ситуации, когда левая граница выходного диапазона находится слева от исходного диапазона.

Сложность линейная (N присваиваний).


screen_image_38_209_60


Выполняет те же действия, что и copy, но перебирает исходные данные в обратном порядке: от элемента, предшествующего last, до first. Итератор result_last должен указывать на элемент, следующий за концом выходной последовательности; возвращаемое значение – это итератор, указывающий на первый элемент выходной последовательности. Итератор result_last не может находиться в диапазоне (first, last] (обратите внимание на границы этого диапазона), но другие части выходного диапазона могут накладываться на исходный диапазон. Таким образом, данный алгоритм можно применять для «копирования вправо», т. е. копирования в ситуации, когда правая граница выходного диапазона находится справа от исходного диапазона.

Сложность линейная (N присваиваний).


screen_image_38_372_60


Копирует в диапазон, начинающийся с result, все элементы диапазона [first, last), для которых pred возвращает true. Возвращает позицию за последним скопированным элементом в полученном диапазоне. Относительный порядок элементов в полученном диапазоне сохраняется. Исходный и результирующий диапазоны не должны перекрываться.

Сложность линейная (N сравнений).


screen_image_38_480_60


Копирует в диапазон, начинающийся с result, n элементов диапазона, начинающегося с first.

Сложность линейная (n присваиваний).


screen_image_39_55_76


Возвращает количество элементов в диапазоне [first, last), которые равны значению value.

Сложность линейная (N сравнений).


screen_image_39_105_76


Возвращает количество элементов в диапазоне [first, last), для которых выражение pred(*p) равно true.

Сложность линейная (N вызовов pred).


screen_image_39_166_76


Возвращает true, если два диапазона содержат одни и те же элементы в одинаковом порядке. Первый диапазон – [first1, last1), второй начинается с first2 и имеет такую же длину; диапазоны могут перекрываться. Для сравнения используется предикат pred(*p1, *p2) или (по умолчанию) операция ==.

Сложность линейная (не более N1 сравнений).


screen_image_39_249_76


Проверяет, имеется ли в диапазоне [first, last) значение value, и возвращает пару итераторов, которые указывают на начало диапазона, содержащего value, и на элемент за концом этого диапазона (если значение не найдено, то оба итератора указывают на позицию в диапазоне, в которую можно вставить value, не нарушая порядка сортировки). Содержимое диапазона должно быть предварительно отсортировано в соответствии с порядком, задаваемым предикатом comp(*p1, *p2) или (по умолчанию) операцией <.

Сложность логарифмическая (не более 2*log N + 1 сравнений).


screen_image_39_378_76


Заполняет выходной диапазон [first, last) значениями value.

Сложность линейная (N присваиваний).


screen_image_39_415_76


Заполняет выходной диапазон из n элементов, начиная с first, значениями value.

Сложность линейная (n присваиваний).


screen_image_39_464_76


Перейти на страницу:

Похожие книги

О станках и калибрах
О станках и калибрах

Все машины — это детища машиностроительных заводов. На этих заводах работают металлообрабатывающие станки — те машины, с помощью которых изготовляются части — детали любых машин: паровозов, автомобилей и самолетов, тракторов и сельскохозяйственных комбайнов, турбин и двигателей внутреннего сгорания, всех рабочих машин, в том числе и самих металлообрабатывающих станков.С помощью станков, созданных советскими инженерами, наш народ сказочно увеличил количество машин на заводах и фабриках и неизмеримо поднял производительность труда в советской промышленности.В наши дни выдающиеся достижения советских станкостроителей служат прочной базой социалистического машиностроения, помогают советским людям в их победоносном шествии к коммунизму. Вот почему к станкостроению и металлообработке приковано особенно пристальное внимание всех советских людей.Рассказам о главных изобретениях и усовершенствованиях в развитии станкостроения и металлообработки и посвящена эта книга.

Зигмунд Наумович Перля

Детская образовательная литература / Технические науки / Книги Для Детей / Образование и наука