Г. Шилдт - Полный справочник по C++ (1109478), страница 98
Текст из файла (страница 98)
Оба диапазона должны быть упорядочены по возрастанию. Результатом является упорядоченная последовательность 11 а 11 Еог еапЬ депегасе и депегвге и 1по1пбее хпр1асе негде кгег амар 1енксодгарЬхса1 ссвюраге 1омег Ьоппй Меняет местами два значения, на которые ссылаются аргументы Выполняет лексикографическое сравнение двух последовательностей Определяет первый элемент последовательности, который не мень- ше, чем заданное значение Создает кучу на основе последовательности Возвращает наибольшее из двух значений Возвращает итератор, установленный на максимальный эгемент диапазона Объединяет две упорядоченные последовательности, помещая ре- зультат в третью последовательность Возвращает наименьшее из двух значений Возвращает нтератор, ссылающийся на минимальный элемент после- довательности ж1п е1епепк Находит первое несовпадение двух последовательностей.
Возвраща- ются итераторы на оба элемента Формирует следующую перестановку элементов последовательности Упорядочивает последовательность так, чтобы все ее элементы, меньше заданного элемента з, предшествовали ему и остальным элементам Упорядочивает диапазон Упорядочивает диапазон, а затем копирует его в результирующую по.
следовательность понг регжитак1оп ЬСЬ е1мкепс рагс1а1 вогк рвггка1 вогг сору Упорядочивает последовательность так, чтобы все ее элементы, удов- летаоГжквае заданному условию, предшествовали всем остальным рор Ьеар Часть И. Язык С++ Меняет меСтами Первый и пОСледний ЗЛЕМЕНтЫ, а ЗатЕм ПЕРестраивавт кучу Окоггаалие табт, 24.5 Предназначение Ргее Регкюхвгхол ревЬ Ьевр гвидон виибб1е Формирует предыдущую перестановку элементов последовательности Заталкивает элемент в конец кучи Перетасовывает последовательность Удаляет элементы иэ укаэанного диапазона гввсяге, гевоее зб, гевотге сору и геккпге сору ЗЕ герхасе. гертасе сору, Заменяет элементы указаннскодиапазона герхасе ехв игерхвсе сору хл гечегве игечегее сору Меняетпорядокследованиязлементовдиапазона на лротнвополож- ный Выполняет левую циклическую перестановку эпемегяов Находит подпоследовательность внутри заданной последовательно- сти гогвхе и гохехе сору вевгси веагси и вех Жйвегепсе Находит и-е вхождение элемента в последовательность Создает последовательность, содержащую несовпадающие элементы двух последовательностей Создает последовательность, содержащую совпадающие элементы двух последовательностей Создает последовательность, явпяющукюя симметричной разностью двух последовательностей Создает последовательность, являющуюся объединением двух по- следовательностей Упорядочивает диапазон Упорядочивает кучу внутри укаэанного диапазона Упорядочивает последовательность тэк, чтобы все элементы, удовле- творяющие определенному условию, предшествовали всем осталь- ным.
Разбиение последовательности фиксируется. Это значит, что при упорядочении сохраняется взаимное расположение двук последо- вательностей вех дпхегвесххоп еег. вухевсг(с охххегепае вес ыпсоп вогх вогс Ьевр есвьхв рагхххзоп Упорядочивает диапазон. Порядок Фиксируется.
Это значит,что рав- ные элементы остаются на своих местах вгаЬхе вогх Меняет местами даа элемента Меняет местами элементы заданного диапазона Применяет Функцию к элементам заданного диапазона, сохраняя ре- зультат в новой последовательности Удаляет дубликаты из заданного диапазона. виар виар гвпоев хгапв Вохм ипхоее и ипхчее сору оррег Ьоэпл находит первый элемент последовательности, не превышающий за- данное значение Подсчет Глава 24.
Введение в стандартную библиетеку шаблонов Олной из главных операций, применяюшихся к последовательностям, является подсчет их элементов. Для этого используются Функции соцпсО или сомов йб(), Их обший вил приведен ниже. Сетор1ахе <с1аэв 1п1хег, с1евв т> ргсс)хйй с социо(1п1сег пап, тп1сег еле(, сопзс т ьааП; т сеюр1асе <с)авв Хп1сег, с1авв цпргей> рггй1гг С сопле(тп1гег Иап, 1п1гег елг/, ипвгей й/я) Тип ргейзгг е является разновидностью типа 1пе. Алгоритм поппе() возвращает количество элементов последовательности, имеюших значение аа!, начиная с позиции, заданной итератором з(ап, и заканчивая позицией, заданной итератором еле(. Алгоритм соиле зд() возврашает количество элементов последовательности, удовлетворяющих преликату р/л, начиная с позиции, заданной итератором з/аг(, и заканчивая позицией, заданной итератором его Слелуюшая пргв рамма делюнстрирует применение алгоритма соиле () .
;, // демонстрация алгоритма сопле(). (, $1пс1ийе <1овсгеагя> ', Вьпс1ийе <чесгог> Вьгс1ийе <свсй11Ь> Вдпс1ийе <а1сог1сию> ив1пс паиеврасе всй; гпс па1п(] ( чессог<Ьоо1> ч; 1пс 1; гог(1=0; 1 < 10; 1++) 1й(гапй() $ 2) ч.рави Ьас)с(сгпе); е1ве ч.риви Ьас)с(са1ве); ) сопс « "Последовательность:1п"; дог(1=0; 1<ч.вьве(); 1++) соие « Ьоо1а1риа « ч(1) « сопс « епй1; 1 = соиле(ч.Ьео1п(), ч.епй(), стае); сопс « "Предикату соответствуют " « 1 « " элемента. тп"! геепгп 0; Зта программа выводит на экран следующие результаты.
Последовательность: Слое Сгпе га1ве га1ве Сгпе га1ве га1ве йа1ве га1ве га1ве Предикату соответствуют 3 элемента. Сначала программа создает вектор„ содержащий случайно сгенерированные значения Егие И га1ве. Затем для полсчета значений егие применяется функция поппе().
Слелуюшая программа илл!острирует работу функции еовпе 1г(). Она созлает вектор, содержаший числа от ! ло !9. Затем она подсчитывает элементы, кратные 3. Для этого создается унарный преликат йзч1йеввуэ (), возвращающий значение егме, если его аргумент кратен 3. // демонстрация алгоритма соиле зт().
В1пс1пйе <1овггеаи> Вьпс1ийе <чесеог> () 1пс1ийе <а1дог1СЬт> ивйпд патеврасе вей; Чаю )!. Язык С++ /* унарный предикат, определлпаэей, делится ли число на 3. */ Ьоо1 й1чзйеаВуз(1п» з) 11((з$3) == О) ге»игп »гиез ге»игп Та1вез Тп» иауп() ( ззес»ог<ьп»> чз ).п» Тот(1=1з з < 20/ з++) ч.риеЬ Ьасх(з) сои» « "Последовательностьз1п"з Тот(1=0з 1<ч.вз.ге()з 1++) сои» «ч[з.) « сои» « епй1з х = соил» 11(ч.Ьед»п(), ч.епй(), й1чьйевпуз)з сои» « "Количество чисел, кратных 3, =" « 1 « ге»игп Оз ) Результаты работы прозраммы приведены ниже.
Последовательностьз 1 2 3 4 5 б т 8 9 10 11 12 13 14 15 16 17 18 19 Количество чисел, кратных 3, =- б. Обратите внимание на то, как заколирован унарный предикат йзчьйевуз () . Аргументами всех унарных предикатов являются объекты, хранящиеся в соответствующем контейнере. Предикат Лолжен возвращать значение»гие или Та1ве. Удаление и замена элементов Иззогда необходимо создать новую последовательность, содержа(дую лишь часть элементов исходной последовательности. Для этого можно применять шаблон алгоритма гевюче сору().
Его спецификация приведена ниже. | »етр)а»е <с1аав 1п1»ег, с1авв Ои»1»ег, с1авв Т> Ои»1»ег геэюче сору(1пт»ег ззаг(, 1пт»ег епз(, Ои»1»ег гезий, сопв» Т азза)) з Алгоритм гевюче сору() копирует элементы из заданного диапазона, удшзяя из него элементы, имеющие значение ча!. Он помешает результат в последовательность, на которую ссылается итератор гага[(, и возвращает итератор, установленный на ее конец. Размер результирующего контеинера должен быть достаточно большим, чтобы в нем поместился результат.
Чтобы в процессе копирования заменить один элемент последовательности другим, следует применять алгоритм гер1асе сору() . Его спецификация приведена ниже. »еир1а»е <с1ааа 1п1»ег, с1авв Ои»1»ег, с1авв Т> Оиг1»ег геиоче сору(1п1»ег пан, Хп1»ег епе), Ои»1»ег геза)з, сопв» Т Ьо)г(, сопв» Т аззеМ Глава 24, Введение в стандартную библиотеку шаблонов Алгоритм хер1аее серу[) копирует элементы из заданного диапазона, заменяя элемент оИ элементом леи.
Он помешает результат в последовательность, на которую ссылается итератор зтзя/Ь и возвращает итератор, установленный на ее конец. Размер результирующего контейнера должен быть достаточно большим, чтобы в нем поместился результат. Алгоритмы гевюче сору() и гер1все сору() ичлюсзрирузотся следующей программой. Она создает последовательность символов, а затем удаляет из нее все пробелы, заменяя нх двоеточиями. // Демонстрация алгоритмов гешоче сору и гер1асе сору.