Главная » Просмотр файлов » Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)

Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033), страница 23

Файл №1004033 Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)) 23 страницаБьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033) страница 232018-10-07СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

епд (), оо); // копировать буфер в поток вывода, //удаляя повторяю<циеся значения паигп !!з.ее<() ( ) !оз< // возврат состояния ошибки (з3.2, з2!.3.3) Тип <Тз<геат — это поток ввода <з<геат, который может быть связан с файлом, а офй еат — это поток вывода оз<геат, который также может связываться с файлом. Второй аргумент конструктора, использованного для создания итератора оо типа оз<геат Ьега<ог, предназначен для отделения друг от друга выводимых значений (де!<тй ои<ри< уо!иез).

3.8.4. Алгоритм Фог еас11 и предикаты Для перебора всех элементов последовательностей приходится использовать итераторы в операторах циклах. Это может быть довольно утомительной задачей, так что стандартная библиотека предоставляет иные способы вызова функций для каждого элемента последовательноппи. Рассмотрим программу для чтения слов из потока и вычисления частоты их встречаемости. Естественным типом данных, предназначенным для хранения слов вместе с их частотой, является тар: а» та!и () з<г!пд з1=*й'< ««Й< <г!пя 2=*и; !п«пат ( ) з<п па )гот <о < си<» угот» <о< //получить имена исходного и целевого файлов Глава 3. Обзор стандартной библиотеки 104 тор<в<пик, <и<> Ви<оягат < Для подсчета частоты встречаемости слов достаточно следующего очевидного кода; гоЫ гесоп< (соля< в<падь з) ( Ыз<одгаи< (з) е +; У частота вхождения з Когда все данные введены и обработаны, нужно вывести результаты подсчетов.

Контейнеры типа тар содержат последовательности пар значений (мппй,ш(), имеющих тии ра<г, так что для вывода нужно будет вызвать функцию вой< рпп< (соим ра<г <сои<< з<г<пе, т<> и г) ( сои<«г.<<гз<« ' ' «г. зевал«« ' 'чп '; для каждого элемента контейнера (первое поле типа ра)г называется 21гм, а второе — зевал<1).

Первое поле в ра<г является скорее сова затпд, чем просто затая, так как все ключи в контейнерах тар есть константы. Вот клиентский код для выполнения намеченной работы: <и< таси () ( <з<геат йега<ог<з<ппя> й (с<и) <з<геат 1<его<ос<в<пни > еоз < <ог еасд (11, еоз, гесог«); <ог еасВ (В(з<одгат.

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

Например, алгоритм 21и<1() (818.5.2) позволяет отыскивать в контейнере специфическое значение. Более общим вариантом этой задачи является поиск элемента, удовлетворяющего заданному требованию. Например, нам может потребоваться разыскать элемент, значение которого больше 42. Так как контейнеры типа шар предоставляют свои элементы в виде пар значений (1<еу,га1ие), то нам нужно найти среди последовательности элементов контейнера тар<затпд, т1> такую пару ран<соим з<Г(лд,(п<>, для которой целочисленное поле больше 42; Воо1 е< 42 (сопя< ра<г<сопз< мг1ид, <л<>з г) ( ге<игл г.зевал«>42< ) гоЫ1(тор<в<пня, <п<>з т) 10Б 3.8. Алгоритмы гуреде) тар<зггтк, (ги>:: сопи дега!ог М1; Мl=()пд (г (т.Ьея(п (), т. епд(),яс 42); У... ) Кроме того, мы могли бы подсчитать число слов с частотой встречаемости, большей 42: го(4 е(сопзг тор<тета, )пг>а и) ( (пг с42 = свинг (г (т.Ьеет (), т.епд(),ег 42) ~7...

) Функции типа йт 42() используются для управления алгоритмами и называются предикатами. Предикат вызывается для каждого элемента и возвраи(ает логическое значение, которое алгоритм использует для принятия решения — выполнять или не выполнять заданное действие над элементом. Например, алгоритм Лпд (7( ) работает до тех пор, пока его предикат не вернет значение ггие, означающее, что искомый элемент найден. Аналогичным образом, алгоритм соиле г7() подсчитывает число элементов контейнера, для которых предикат возвращает значение )еие. В стандартной библиотеке имеется ряд готовых предикатов и несколько полезных шаблонов, позволяющих получать новые предикаты Я)8.4.2).

3.8.5. Алгоритмы, использующие функции-члены классов Многие алгоритмы вызывают функции для каждого элемента последовательности. Например, в 83.8.4 алгоритм 2ог еасЬ ()г, еоз, гесогд); вызывает функцию гесогд() для каждой строки, прочитанной из потока ввода. Часто приходится работать с контейнерами, содержащими указатели на объекты, для которых по этим указателям нужно вызвать функции-члены классов, а не глобальные функции.

Например, нам может потребоваться вызвать функцию-член ойаре:: дгап() для каждого элемента контейнера типа!иг<ЯЬаре*>. Для решения данной конкретной задачи мы можем просто написать глобальную функцию, вызывающую функцию-член класса: соЫ4 ан (ЯЬаре" р) ( р — >лгпи (); ) гоЫГ(дзг<БЬаре*>а эЬ) ( лог еасЬ (зЬ . Ьеят ( ), зЬ . епд ( ), и ап); ) Обобщением этой идеи является решение, опирающееся на шаблон тет )1ги() из стандартной библиотеки: Глава 3. Обзор стандартной библиотеки 106 гоЫд((Ы<бларе*>ь вЬ) ( )ог еасЬ (вЬ.Ьея(п(),вл.впав(),тет уип (аБЬаре::Игазг) ); ) Шаблон тет 21та() (818.4.4.2) в качестве параметра принимает указатель на функцию-член класса (815.5) и возвращает нечто, что может быть вызвано по указателю на класс.

Результат тетгаа(йойаре::т?газе) берет аргумент типа Ягоре* и возвращает то, что возвращает функция Ятре:: й азг () . Шаблон тет 1)га очень важен на практике, так как позволяет использовать стандартные алгоритмы для контейнеров, содержащих объекты полиморфных типов. Нет перевода заголовка Вызвать функцию для каждого элемента (918.5 1) уог еасЬ() Найти первое вхождение аргументов (818 5.2) , 1тпгГО Найти первое соответствие предикату (918.5 2) Сосчитать число вхождений элемента (918.5.3) Япт( Х() саит() Сосчитать число соответствий предикату (318 5 3) соипт тэ'() Заменить элемент новым значением (818.б.4) гертасе () Заменить элемент, соответствующий предикату, новым значением (818 б.4) гертасе (Г() сору ( ) ( Скопировать Скопировать ип(оие сору() ) Отсортирова еогг() ' евиа! гапееи , 'Найтидиапаз () теще() , 'Слияние отсо Все эти и многие другие алгоритмы (см.

главу 18) можно применять к стандартным контейнерам, строкам типа зтгтпя и встроенным массивам. 3.8.б. Алгоритмы стандартной библиотеки Что такое алгоритм? Общее определение алгоритма гласит, что это «конечный набор правил, определяющих последовательность операций для решения конкретного множества задач и удовлетворяющих пяти принципам: конечность ... определенность ... ввод ... вывод ... эффективность» (Кпвт)т, 1968, 81.Ц. В контексте стандартной библиотеки алгоритм есть набор шаблонов для работы с последовательностями элементов.

Стандартная библиотека содержит десятки алгоритмов. Алгоритмы объявляются в пространстве имен згб и реализуются в заголовочном файле <а18ог(гйт>. Вот некоторые из наиболее полезных алгоритмов: 107 3.9. Математические вычисления 3.9. Математические вычисления Как и язык С, С++ не разрабатывался специально для решения вычислительных задач. И тем не менее, математическая проблематика реально присутствует в программах на языке С++, и стандартная библиотека этот факт отражает.

3.9.1. Комплексные числа Стандартная библиотека поддерживает семейство комплекснозначных типов по линии класса сотр1ех, рассмотренного в Э2.5.2. Чтобы предоставить возможность скалярным элементам комплексных чисел иметь типы у!оаг, 1!оиЫе и так далее, класс ветр!ах стандартной библиотеки объявлен шаблоном: 1етргаге<сгазз зса1аг> с!аяз сотр1ех ( риЫ!с: сотргех (яса1аг ге, яса1аг !т); У... )1 Для комплексных чисел поддерживаются обычные арифметические операции и наиболее обшие математические функции.

Например: г7 Стандартная функция возведения в степень из <сотр!ех>: 1етргаге<с1ат С> совр!ех<С> розг (сопи сотр!ех<С> ь, т1 ); го(а1 (совр!ех<!(оа1> 71, ветр!ах<1!оиЫе> 11Ь) ( сотр1ех<1опд аоиЫе> 1й = !1~яузе(г!Ь) 1 в(Ь в=Я*31 7)=розг (1/!1, 2) 1 !! ... ) Подробности см. в Э22.5. 3.9.2. Векторная арифметика Класс весгог, рассмотренный в Э3.7.1, разрабатывался так, чтобы обеспечить обШий и гибкий механизм для хранения объектов, который согласуется с архитектурой контейнеров, итераторов и алгоритмов. Этот класс не поддерживает математических операций с векторами.

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

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

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

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