Главная » Просмотр файлов » Г. Шилдт - Полный справочник по C++

Г. Шилдт - Полный справочник по C++ (1109478), страница 130

Файл №1109478 Г. Шилдт - Полный справочник по C++ (Г. Шилдт - Полный справочник по C++) 130 страницаГ. Шилдт - Полный справочник по C++ (1109478) страница 1302019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 130)

Класс овсгеаеьил 1сегасог имеет следующие конструкторы. овсхеатьит 1сехасог(овскеав» суре амгеа»а) гиком(); овсхеаг?»ит 1секасох(вскеав»Ьог суре *мгеа»а(»иД гиком() Первый конструктор создает итератор, ссылающийся на поток зггеат. Тип с»вскеа»а суре определяется оператором суре»?ел и задает тип потока вывода. Второй конструктор создает итератор, используя потоковый буфер гг»вал»(»и~ Тип всгеатЬел гуре ОПРеделяется оператором куреная и залает тип потокового буфера.

Глава 35. Стандартные итераторы, распределители памяти н фунаторы Например, в следующем фрагменте функтор 1евв<) применяется к операндам типа 1пс. $ 1еяя<1пс>[) Базовым для всех бинарных функторов является класс Ыпа*у гипсс1оп сеер1асе <с1авя Агдипеос1, с) аяя Агдиыепс2, с1аья веяи1с> яггисс ь1пагу Гипсе[оп ( Сурег)ег Агдиеепе1 1[гяе агдипепе Суре; Сурет)ег Агдипепе2 яесопг( агдитепе Суре; Сурег(ей Иеяи1С геяи1С Суре; ); Базовым для всех унарных функторов является класс ипагу еипсс1сп.

еепр1асе <с1авя Агдиаепе, с1аяя Веяи1с> ягсисс ипагу (щтсс[оо ( Суре((ее Лгдитепе агдиыепе Суре; суреде1 Кеяи1Г геяи1Е гуре; ); Зги шаблонные классы конкретизируют обобщенные типы да(шых, используемые функторами. Хотя с технической точки зрения они играют лишь вспомогательную роль, их всегда используют при создании функторов. Шаблонные спецификации всех бинарных и унарных функторов аналогичны. Рассмотрим их примеры.

сетр1асе <с1аяя т> ясгисс р1ив : Ыпагу типсс1оп<т, т, т> ( Т орегаеог<) (сипае Т Иогл), сипае Т аогл2) сопяе; ); сеп~р1аее <с1аяя т> ясгисс педасе : ипагу биссе!оп<т, т> ( Т орегаеог() (сипае Т аогя) сопят; ); Каждая функция орегаеог() возвращает конкрстнь(й результат. Редакторы связей Редактор связей обеспечивает связывание значения с аргумент том бинарного функ- тора, создавая унарный функтор. Существуют два редактора связси: ьвпа1вс[) и Ыпазпа<). Они определены следу(ощим образом.

| Сетр1аее <с1аяв В[суисс, с1аая Т> Ыпйег1яс<В1припс> Ыпд1яс(сопяс В[припс вор, сопяс т лио(ие); сапр1асе <с1авя Вуприпс, с1аяя т> Ыпе(ег2пс(<В[суисс> Ыпг(2пг((сипае В1грипс Ьор, сопае Т аио(иг); Здесь параметр ор является бинарным функтором, например 1евя<) или дгеасег< ), выполняющим требуемую операцию, а параметр иа(ие представляет собой связываемое значение. Функтор Ьепдзве[) ВОЗВРашает унарный функтор. в котором левый операнд бинарного функтора ор связан с конкретным значением иа(ие. Фуцктор ьвпазтьз() возвращает унарный функгор, в которол1 конкретное значение иа!ие связывается с правым операндол[ бинарного функтора ор. Функтор ьвпазпд[) используется намного чаще.

В обоих случаях результатом работы редактора связей является унарный функтор, связанный с указанным значением. Глава 35. Стандартные итераторы, распределители памяти и функторы Опрелелсния классов Ь1пйетзвс и Ькпйетзпй выглядят следующим образом. Сепр1асе «с1аяв В1припс> с1аяя Ыпйет1яс: риЬ1тс ипату Еогсстоп(сурепапе ВЕпрппс::яесопй атрцпепС Суре, Сурепапе ВЕпРипс::теяи1С Суре> ( ргосессес): Вупрзюс ор; Сурепапе ВЕпвипс:."Ебтяс атрипепС Суре ча1пе; риЫ1с: Ь'пйет1яс(согвс Вупуппс вор, согяС Сурепапе ВЕприпс::ЕттвС атрппепС Суре Ьг) теяп1С Суре оретасот()(попас атрспепс Суре Ьт) сопят; )' Сепр1асе <с1авя В1гГипс> с1авв Ыпйет2пй: рпЫ1с ипату Еипссуоп(Сурепапе ВЕприпс::Ектвс атрипепс Суре, Сурепапе В(приво::тево1С Суре> ( ргосессей: В1прппс ор; Сурепапе В1припс::яесопй атулпепс Суре ча1пе: риЬ11с: Ьтпйет2пй(сопяС Вкпрппс вор, сопят Сурегапе ВЕгрипс:."весопй атоипепс Суре тп) теяп1С Суре оретасот(](сопят атрппепс Суре ьщ сопвс; ); Здесь класс ВшГилс является типом бинар]юго функтора.

Обратите внимание на то, что оба класса являются производными от класса ппвту Еипсс1оп. Благодаря этому результирующие объекты функторов Ькпйзясщ и Ькпйгпй() можно применят( везде, где допускаются унарные функции. Инверторы Инвертор возвращает предикат. значение которого противоположно значению модифицнруемого предиката. Существуют два инвертора: посв() и посд(). Их спецификации выглядят следующим образом. 1 сепр1асе <с1авв цпртей> ипату пеоасе«цпртей> пос1(сопят цпртей вргет(); Сепр1асе <с1авя ВтпРтей> Ыпату первее<ВЬпРтей> гоС2(сопят В1пртей алга()( Определения этих классов приведены ниже. Сепр1асе <с1авв цпРтей> с1авв осаку пересе: рцЫЕс ппату ЕппсС1оп<Сурепапе цпРтей::атуппепс Суре, Ьоо1> ( роЫтс ехр)< сзс ппату первее(попас цпртей Ьргег(]; Ьоо1 оретасот() (сопяС атрипепс Суре аг] сопят; ); Сепр1асе <с1аяв цпРтей> с1авя ЬЕпату педасе: риЬЬЕс ЬЕпату Еппссбоп<сурепапе ВЕгртей::ЕЕтяс атдцпепс Суре, Сурепапе ВЕпртей::ЕЕтяс атропепс Суре, Ьоо1> Часть 1)(.

Библиотека стандартных классов рцЫйс ехр11сйг Ьгпагу педаге(сопвг вйпргес) аргед); Ьоо1 орегагог()(сопвс ййгвс агдцшепг Суре ап(, сопвг вессс«< агулпепг суре ьп2) сопвс< ): В обоих вариантах операторная функция орегаеог() возвращает отрицание преднката, заданного параметром ргед.

Адаптеры В заголовке <йцпсейопа1> определены несколько классов, называемых адалтероми. Они позволяют преобразовать указа~ель на функцию так, чтобы его можно было использовать в стандартной библиотеке шаблонов. Например, с помощью адаптера можно использовать такую функцию, как вегсшр(), в качестве предиката. Кроме того существу<от адаптеры для указателей на члены классов, Адаптеры указателей на функции Адаптеры указателей на функцию выглядят так. Гешр1аге <с1авв Агдцшепс, с1авв Ревц1Г> роп ьег со цпагу йцпссйоп<лгулпепс, вевц1г> ргг йцп(левц1с (*Апас) (Агдцшепм ); Еешр1асе <с1авв Агдшпепс1, с1авв Агдцшепе2, с1авв Вевц1С> ройпсег Ео Ьйпагу йцпсгйоп<Агдцшепг1, Агдцшепг2, Вевц1С> рсг йцп(йевц1с(<Авве) [Агдцшепс1, Агдцшепс2! ); Здесь функция рег вцп[) возвращает объект класса роапеег ео влагу йцпсейоп или ройпеег ео,гаагу йцпсеаопц Эти классы приведены ниже.

Гешр1аее <с1авв Агдцшепс, с1авв Вевц1Г> с1авв ройпгег Го цпагу йцпсейоп: рцЫйс спасу йцпсгйоп<Агдцшепг, Еевц1Г> рцЬ1йс." ехр11сйе ройпгег Со спасу йцпсгйоп(девц1Е (+Гияс)(Агдцшепг)) девц1С орегагог() <Агдцшепе агв) согжг; ); гешр1асе «с1авв Агдцшепг1, с1авв Агуппепс2, с1авв вевц1г> с1авв ройпсег Го Ыпагу йцпсгйоп: рцЫ1с Ьйпагу йцпсгйоп<Агдцшепе1„Агдцшепе2, левай> ( рцЫйс: ехр1йсйе рогпеег Го Ьгпагу йцпссйоп( вевц1Г (>йплс) (Агдцшепг1, Агулпепг2) ); Вевц1С орегасог() (Агдцшепп1 ага(, Агдцшепе2 вгв2) сопвс; Для унарных функций операторная функция орегаеог() возвращает значение Галс<агу), а для бинарных — значение Гипс(а<у1, а<х2).

Типы результатов зтих операций задаются обобщенным типом Левц1г. Глава 35. Сте<о<артиые итервторы, распределители памяти и фтнкторы Адаптеры указателей на функции — члены класса Адаптеры указателей на функцию — член класса выглядят т(к. »епр1а»е <с1авя Кеяи1», с1авв Т> п|еп Еип»«иеяи1», Т> пев тип(иеви1»(Т::'Лгаг) () ) »евр1а»е <с1аяв Кеви1», с1авв Агоит~еп»> теп Еип1 »<Кеяи1», Т, Аг()ипеп»> пет Еип1(Кеви1 (т:: "(йаг) (Агоитееп») ); Здесь функция еев( еип() аозврашает объект класса вшв еип е, а функция яев еип1() вознрашает объект класса заев еип1». Зги классы приведены ниже. »етрза»е <с1аяв Кеви1», с1аяв Т> с1авя пет Еип риЬ11с агапу Еипс»1оп<Т*, Кеяи1»> ( риЬ11с: ехр11сь» пеп Гип» (Кеви1» (Т:: "()ах) () ); Кеви1» орега»ог()(Т "Авх) сопя»; »етр1а»е <с1авв Кеви1», с1аяя Т, с1авв Аг()иэеп»> с1авя вен Еип1 риЫЕс Ьгпагу Еипс»1оп<Т', Агогяяеп», Кеяи1»> ( риЬ11с: ехр11сй» тем Еип1 »(Кеви1» (Т::"ба~с)(Агсиггеп»)) Кеви1» орега»ог()(Т )яас, Агдитеп» агя) сопя»; ): Конструктор ю(асса лев еип е вызывает Функцию-член, заданную а качестве параметра.

Конструктор класса заев Еипз Е ВЫЗЫВаст фунКциЮ-ЧЛЕН, ЗаданнУю в качестве первого параметра, передавая ей как аргумент свой второй параметр, имсюший тип Агдшаепе. Лля ссылок на функции- пены сушестаует параллельный набор адаптеров. »емр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аяя Т, с1аяя Агяияеп»> с1авв теп Еип1 геХ риЫгс Ьзпагу Еигс»ьог<Т, Агдитеп», Кеяи1»> ( риЫ1с: ехр11с1» пеп Еип1 геЕ»(леяи1» (Т::")иае) (Агдитеп») ); кеви1» орега»ог() (т йлхаг, Агяиееп» игл) сопв»; ); Часть В.

Библиотека стандартных классов ::""-':.":~ Распределители памяти Распределитель памяти управляет выделением памяти для контейнера. Поскольку в библиотеке БТ). определен распределитель памяти по умолчанию, который автоматически ис(тользуется контейнерами. большинство программистов избавлено от необходимости разбираться в мсханизме его работы или создавать свои собственный распределитель. Однако такие значения оказываются полезными, если необходимо создать свою библиотеку классов или нечто подобное. Все распределители памяти должны удовлетворять нескольким требованиям.

Вопервых, они должны содержать определения следующих типов. ев1ие Фуре Во-вторых, все распределители памяти должны предусматривать следующие функции. вадгввв в11осв«е двв11осв«е акзх вт ве сопв«гас« аев«гоу Кроме того, в зтих классах должны быть определены операторы "==*' и "(='*. Распределитель памяти, предусмотренный по умолчанию, называется а11осв«ог. Этот класс определен в заголовке <тзеиогу>. Его шаблонная спепификация выглялит следующим образом. (й «ел1р1а«е <с1аев т> с1авз а11оса«ох Здесь класс т представляет собой тип объектов, размещаемых в палшти с помощью рас- пределителя в11оса«ог. В классе в11осв«ог определяются следующие конструкторы.

Характеристики

Тип файла
DJVU-файл
Размер
7,03 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6553
Авторов
на СтудИзбе
299
Средний доход
с одного платного файла
Обучение Подробнее