|
Программирование >> Операторы преобразования типа
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 не используется.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |