12.3.5. Адаптеры функций для объектов-функций

12.3.5. Адаптеры функций для объектов-функций

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

* связыватели (binders). Это адаптеры, преобразующие бинарный объект-функцию в унарный объект, связывая один из аргументов с конкретным значением. Например, для подсчета в контейнере всех элементов, которые меньше или равны 10, следует передать алгоритму count_if() объект-функцию less_equal, один из аргументов которого равен 10. В следующем разделе мы покажем, как это сделать;

* отрицатели (negators). Это адаптеры, изменяющие значение истинности объекта-функции на противоположное. Например, для подсчета всех элементов внутри контейнера, которые больше 10, мы могли бы передать алгоритму count_if() отрицатель объекта-функции less_equal, один из аргументов которого равен 10. Конечно, в данном случае проще передать связыватель объекта-функции greater, ограничив один из аргументов со значением 10.

В стандартную библиотеку входит два предопределенных адаптера-связывателя: bind1st и bind2nd, причем bind1st связывает некоторое значение с первым аргументом бинарного объекта-функции, а bind2nd – со вторым. Например, для подсчета внутри контейнера всех элементов, которые меньше или равны 10, мы могли бы передать

count_if( vec.begin(), vec.end(),

алгоритму count_if() следующее:

bind2nd( less_equalint(), 10 ));

В стандартной библиотеке также есть два предопределенных адаптера-отрицателя: not1 и not2. not1 инвертирует значение истинности унарного предиката, являющегося объектом-функцией, а not2 – значение бинарного предиката. Для отрицания рассмотренного ыше связывателя объекта-функции less_equal можно написать

count_if( vec.begin(), vec.end(),

следующее:

not1( bind2nd( less_equalint(), 10 )));

Другие примеры использования связывателей и отрицателей приведены в Приложении, вместе с примерами использования каждого алгоритма.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Адаптеры функций (Function adaptors)

Из книги Руководство по стандартной библиотеке шаблонов (STL) автора Ли Менг

Адаптеры функций (Function adaptors) Функциональные адаптеры работают только с классами функциональных объектов с определёнными типами параметров и типом


26. Описание функций

Из книги Программирование автора Козлова Ирина Сергеевна

26. Описание функций При использовании операции ++ к целой переменной к ней просто добавляется единица. Первая часть оператора for не обязательно должна быть описанием, она может быть простым оператором. К примеру:for (i=0; i<10; i++) q[i]=»p[i];»тоже по смыслу соответствует


Совет 46. Передавайте алгоритмам объекты функций вместо функций

Из книги Эффективное использование STL автора Мейерс Скотт

Совет 46. Передавайте алгоритмам объекты функций вместо функций Часто говорят, что повышение уровня абстракции языков высокого уровня приводит к снижению эффективности сгенерированного кода. Александр Степанов, изобретатель STL, однажды разработал небольшой комплекс


Перечисление функций

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Перечисление функций Вслед за разделом ТИПЫ идет раздел ФУНКЦИИ, в котором перечисляются операции, применяемые к экземплярам данного АТД. Как уже говорилось, эти операции будут главными компонентами определения типа, с их помощью описывается, что могут предложить его


Категории функций

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

Категории функций В начале этой лекции операции над типами были разделены на конструкторы, запросы и команды. В спецификации АТД для нового типа T, например для STACK [G] в нашем примере можно определить эту классификацию более строго. Эта классификация просто проверяет, где


Вызовы функций

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

Вызовы функций Вызовы функций имеют такой же синтаксис, как и вызовы процедур. Они могут быть квалифицированные и неквалифицированные: в первом случае используется нотация с многоточием. При соответствующих объявлениях класса и функций, они, например, таковы:b.fb.g(x, y,


Объявление функций

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Объявление функций Прежде чем функция будет использована где-то в Web-сценарии, ее нужно объявить. Функцию объявляют с помощью ключевого слова function:function <имя функции>([<список параметров, разделенных запятыми>])<тело функции>Имя функции, как уже говорилось, должно


Вызов функций

Из книги Macromedia Flash Professional 8. Графика и анимация автора Дронов В. А.

Вызов функций После объявления функции ее можно вызвать из любого Web-сценария, присутствующего на этой же Web-странице. Формат вызова функции:<имя функции>([<список фактических параметров, разделенных запятыми>])Здесь указывается имя нужной функции и в круглых


Объявление функций

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Объявление функций Прежде чем функция будет использована где-то в Web-сценарии, ее нужно объявить. Функцию объявляют с помощью ключевого слова function:function <имя функции>([<список параметров, разделенных запятыми>])<тело функции>Имя функции, как уже говорилось, должно


Вызов функций

Из книги автора

Вызов функций После объявления функции ее можно вызвать из любого Web-сценария, присутствующего на этой же Web-странице. Формат вызова функции:<имя функции>([<список фактических параметров, разделенных запятыми>])Здесь указывается имя нужной функции и в круглых


Вызовы функций

Из книги автора

Вызовы функций Синтаксис:<выражение> (<список-выражений>)Значением <выражения> должен быть адрес функции. В простейшем случае это идентификатор функции. <Список выражений> содержит выражения, разделенные запятыми. Значение каждого из этих выражений


Объявление функций

Из книги автора

Объявление функций Прежде чем функция будет использована где-то в сценарии, ее нужно объявить. Объявление функции выполняется с помощью ключевого слова function. function <Имя>([<Список параметров, разделенных запятыми>]) <Тело функции> Имя функции, как уже говорилось,


19.6. Файл функций

Из книги автора

19.6. Файл функций После того, как будет создано несколько регулярно используемых функций, их можно поместить в файл функций, а затем загружать этой файл в среду интерпретатора shell.В начале файла функции должна находиться конструкция #!/bin/sh. Этому файлу можно присвоить любое


19.11. Вызов функций

Из книги автора

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


19.11.2. Вызов функций из файла функций

Из книги автора

19.11.2. Вызов функций из файла функций Мы уже рассматривали, каким образом функции вызываются из командной строки. Эти типы функций обычно используются утилитами, создающими системные сообщения.А теперь воспользуемся снова описанной выше функцией, но в этом случае