Программирование >>  Операторы преобразования типа 

1 ... 97 98 99 [ 100 ] 101 102 103 ... 239


PRINT ELEMENTSCcoll):

Следующее выражение формирует унарный предикат для проверки условия значение больше 4 и меньше 7*:

compose f gx hx(logical and<bool>().

b1nd2nd(greater<int>C).4). blnd2nd(less<1nt>().7))):

Результат выполнения программы выглядит так:

1 2 3 4 5 6 7 8 9 1 2 3 4 7 8 9

Этот предикат вычисляет для каждого значения х;

opUop2Cx).op3(x))

Пример использования адаптера compose f gx hx:

fo/compose2.cpp include <1ostream> Iinclude <vector> Iinclude <algor1thm> Iinclude <functional> Iinclude print.hpp Iinclude compose21.hpp using namespace std:

int mainO

vector<lnt> coll:

Вставка элементов со значениями от 1 до 9 for (int 1=1: i<=9; ++1) ( coll.push backC1):

PRINTJLEMENTSCcoll):

Удаление всех элементов, больших 4. но меньших 7

- retain new end

vector<int>::1terator pos:

pos = rernove if (coll .beginC) .coll .end().

coinpose f gx hx( 1 ogl cal and<bool >C).

b1nd2nd(greater<int>().4). b1nd2nd(less<int>().7))):

Стирание удаленных элементов из коллекции coll ,erase(pos.coll .endO);



Бинарные композиционные адаптеры

Один из бинарных композиционных адаптеров обрабатывает результат двух унарных операций, которым передаются разные элементы. Автор выбрал для этого адаптера Ихмя compose f gx hy. Возможная реализация выглядит так:

fo/cofTipose22.hpp Iinclude <funct1onal>

/* Класс композиционнного адаптера compose f gx hy */

template <class OPl, class 0P2. class 0P3> class cofTipose f gx hy t

argument type, argument type. result type>

: public std: :binary functlon<typename 0P2:

typename 0P3 typename OPl

private:

OPl opl: Вычисление: oplCop2Cx).op3(y)) 0P2 op2: 0P3 орЗ: publ1c: Конструктор

compose f gx hy t Cconst 0P1& ol, const 0P2& o2. const 0P3& o3) : opiCol), op2Co2). орЗСоЗ) {

Вызов функции typename OPl::result type operatorOCconst typename 0P2 const typename 0P3 return oplCop2Cx).op3Cy))

;argument type& x. :argument type& y) const {

/* Вспомогательная функция для композиционного адаптера compose f gx hy */

template <class OPl. class 0P2. class 0P3> inline compose f gx hy t<OPl.0P2.0P3>

compose f gx hy Cconst 0P1& ol. const 0P2& o2. const 0P3& o3) ( return compose f gx hy t<OPl.0P2.0P3>(ol.o2,o3):

В следуюпхем примере демонстрируется применение адаптера compose f gx hy. В нем производится поиск подстроки без учета регистра символов:

fo/compose3.cpp #include <lostream> #lnclude <algor1thm> Iinclude <funct1onal>



#1nclude <strlng> #1nclLide <cctype> #1nclude compose22,hpp using namespace std:

int mainC) (

string s( Internationalization ); string sub( Nat1on );

Поиск подстроки без учета регистра символов string;:1terator pos:

pos = search (s.beginO.s.endC). Строка

sub.beginC),sub.endC). Искомая подстрока

compose f gx hyCequal to<int>0. Критерий сравнения

ptr fun(:;toupper).

ptr funC;:toupper))):

if epos != S.endO) {

cout \ sub \ is part of \ s \ endl;

Программа выводит следующий результат:

Nation is part of Internationalization

Ha c. 482 приведен пример поиска подстроки без учета регистра символов, в котором адаптер compose f gx hy не используется.



1 ... 97 98 99 [ 100 ] 101 102 103 ... 239

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