Программирование >>  Инициализация объектов класса, структура 

1 ... 184 185 186 [ 187 ] 188 189 190 ... 395


modulus<Int> IntModulus;

ln1 no ! Tлr 1

Ires = IntModulus( Ival1, Ival2 );

ires = BinaryFunc( modulus<int>(), ival1, ival2 );

negate<int> intNegate; ires = intNegate( ires );

Вычисление противоположного значения: negate<Type>

Ires = UnaryFunc( negate<Int>(), Ival1 );

12.3.3. Сравнительные объекты-функции

Сравнительные объекты-функции поддерживают операции равенства, неравенства, больше, больше или равно, меньше, меньше или равно.

equal to<string> stringEqual; sres = stringEqual( sval1, sval2 ); ires = count if( svec.begin(), svec.end(),

Равенство: equal to<Type>

equal to<string>(), sval1 );

not equal to<complex> complexNotEqual; cres = complexNotEqual( cval1, cval2 ); ires = count if( svec.begin(), svec.end(),

Неравенство: not equal to<Type>

not equal to<string>(), sval1 );

greater<int> intGreater;

ires = intGreater( ival1, ival2 );

ires = count if( svec.begin(), svec.end(),

Больше: greater<Type>

greater<string>(), sval1 );

greater equal<double> doubleGreaterEqual; dres = doubleGreaterEqual( dval1, dval2 ); ires = count if( svec.begin(), svec.end(),

Больше или равно: greater equal<Type>



less<Int>

IntLess;

Ires = IntLess( Ival1, Ival2 ); ires = count if( svec.begin(), svec.end(),

Меньше: less<Type>

less<string>(), sval1 );

less equal<int> intLessEqual;

ires = intLessEal( ival1, ival2 );

ires = count if( svec.begin(), svec.end(),

Меньше или равно: less equal<Type>

less equal<string>(), sval1 );

12.3.4. Логические объекты-функции

Логические объекты-функции поддерживают операции логическое И (возвращает true, если оба операнда равны true, - применяет оператор &&, ассоциированный с типом Type), логическое ИЛИ (возвращает true, если хотя бы один из операндов равен true, - применяет оператор , ассоциированный с типом Type) и логическое НЕ (возвращает true, если операнд равен false, - применяет оператор !, ассоциированный с типом Type)

logical and<int> intAnd;

ires = intLess( ival1, ival2 );

Логическое И: logical and<Type>

dres = BinaryFunc( logical and<double>(), dval1, dval2 );

logical or<int> intSub; ires = intSub( ival1, ival2

intSub( ival1, ival2 ); Логическое ИЛИ: logical or<Type>

dres = BinaryFunc( logical or<double>(), dval1, dval2 );

logical not<Int> IntNot; ires = IntNot( Ival1, Ival2

IntNot( Ival1, Ival2 ); Логическое НЕ: logical not<Type>

dres = UnaryFunc( logical or<double>(), dval1 );

greater equal <string>(), sval1 );



count if( vec.begin(), vec.end(),

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

bind2nd( less eal<int>(), 10 ));

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

count if( vec.begin(), vec.end(), следующее:

not1( bind2nd( less eal<int>(), 10 )));

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

12.3.6. Реализация объекта-функции

При реализации программы в разделе 12.2 нам уже приходилось определять ряд объектов-функций. В этом разделе мы изучим необходимые шаги и возможные вариации при определении класса объекта-функции. (В главе 13 определение класса рассматривается детально; в главе 15 обсуждается перегрузка операторов.)

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

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

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

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

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



1 ... 184 185 186 [ 187 ] 188 189 190 ... 395

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика