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

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

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

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

Оканчакие табл. 24.4 Функ»(ия клея го»а агаве(хсегасог О» Удаляетэлемент, на который ссыпается итератор с Возвращает итератор, установленный на элемент, сле- дующий за удаленным Удаляет элементы из диапазона, заданного итератора- ми з(ахи апд Возвращает итератор, установленный на элемент, следующий за последним удаленным Удаляет из ассоциативного массива элементы, имею- щие значение К ха аее (хсегасог з(вп, хсвгасог васО » ехке суре агаве (сопвс иеу суре ак)т хсетасог е»к»а(аспас Геу сзхт а/Пг сопес Хсегксог Вспа (попас кеу суре ах)т Возвращает итератор, установленный на указанный ключ.

Если ключ не найден, возвращается итератор, установленный на конец массива 1Сегаког Хпеегк (1сегасог г, сопев чехов суре ака/)г Вставляет элемент со значением ка/ на место или сразу после элемента, на который ссылается итератор г. Воз- вращается итератор, установленный на этот элемент Вставляет элементы из диапазона, заданного итерато- рами агади ела Вставляет элемент со значением ка/ в вызывающий ассоциативный контейнер.

Возвращает итератор, ссы- лающийся на вставленный элемент. Элемент вставля- ется, только если его еще не было е ассоциативном массиве. В плуте успеха возвращается объект класса рахг<хсегасог, сгие>. В противном случае возвра- щается объект класса рахг<хсегасог. ва1ее> Сеерзаке <схаев хпккег> чоха ьпеекс(хпхсег мап, хпхсег екО» рахг<хсегасог, Ъоох > хпвегс(сопяс чехия суре аиабт Возвращает ссылку на элемент, заданный итератором /. Если элемента в массиве не было, он вставляется туда Возвращает текущее количество элементов вектора еарреа курей орегесог() (сопев иеу суре ы) г ехке суре яхве[) со»»вс» Пары ключ-значение хранятся в ассоциативном массиве как объекты типа рехг.

Его шаблонная спецификация имеет следующий вид. Ктуре, с1аяя Чхуре> ядгцсС райх ( Й1гяс суре» // Тип ключа яесопа Суре» // Тип значения // Содержит ключ // Содержит значение сепр1асе <с1авя Суреаеб КСуре Суреаеб ЧСуре Ксуре б1гвсг чсуре весопа) // Конструкторы райх() г рахг(сопят КСуре й)<, сопяС ЧСуре йч)г Сепр1аге<с1авя А, с1авв В> рахг(сопвС«А, В> йо)») ) Как видим, зтэ функция возвращает объект класса ра1г, состоящий из пары значений типов К/ура и )»гуре.

Преимущество функции мане разк-() заключается в том, Часть П. Язык С++ Как подсказывают комментарии, значение, хранящееся в пале бхгас, содержит ключ, э поле аеоопа хранит значение, соответствующее этому ключу. Пару можно создать, вызвав либо конструкторы класса рахг, либо функцию маке рахг(), созлаюшую объекты клааса ра1г на основе информации о типе параметров. Функция маке рахг() является обобщенной, Ес прототип приведен ниже.

сеюр1асе <с1аяя К(ура, с1авя Угуре> раъг<Кбре, Угуре> юа)<е рахг(сопас Кбре йй, сопят Улре йк) г что типы хранящихся объектов определяются компилятором автоматически, и задавать его явно не требуется. Следующая программа иллюстрирует основные операции над ассоциативным массивам, в котором хранятся пары значений, определяющие взаимное соответствие между прописными буквами и их АБСП-кодами. Таким образом, ключом является символ, а значением — целое число. Пары ключ-значение имеют следующий вид: Когда пользователь вводит ключ (т.е. букву от д до н), на экран выводится его АБСП-код.

// Демонстрация орос~ого ассоциативного массива. 41пс1и<)е <1овекеав> 41пс1ц<)е <вар> цв1пд павеарасе вес)з з.пе ваз.п() вар<с)заг, зпс> еи зпс з. з // Записываем пары в ассоциативный массив. бог(1=Оз з.<2бз 1++) ( в.1паегс(ра1г<с)заг, 1пе>('д'+1. 65+1))з с)заг сиз соце « "Введите ключ: с1п» стзз вар<с)заг, 1пс>зз1сегасог рз // Найти значение по заданному ключу.

р = в.11пс)(сЫ з 1с(р != в.епс)!)) соце « "ДЗС11-код ключа равен " « р->весопбз е1ве соцс « "Ключ не найден.1п" з гегцгп Оз ) Обратите внимание на то, что для создания пары ключ-значение применяется шаблонный класс раде. Тип данных, определенный этим классом, должен соответспювать типу ассоциативного массива, в который вставляются пары ключ-значение. После инициализации ассоциативного массива любое значение можно найти по его ключу.

Для этого следует вызвать функцию я1зийО, которая возвращает итератор, установленный на требуемый элемент или на конец массива, если нужного элемента в массиве не оказалось. Значение, связанное с найденным ключом, содержится в поле веоопн класса ра1к. В предылушем примере пара ключ-значение создавалась явным образом с помощью конструктора класса раьк<сиак, ьпе>. Наряду с этим можно применять функ- ЦИКЗ вяз)<а ра1к(), создавшую пары ключ-значение на основе информации о типе параметров. Например, в предыдущей программе оператор ()в.1пвегс(ваке ра1г((с)заг)('д'+1), б5+з.))з Глава 24.

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

Лля етого используются два класса с именами залы и пивьет. Поскольку ассоциативный массив хранит упорядоченный список ключеи, в программе определяется оператор "<" для сравнения объектов класса лаяв. Как правило, оператор "<" необходимо определять в любом классе, объекты которого используются в качестве ключей.

(Некоторые компиляторы требуют, чтобы в таких классах были определены лополнительные операторы сравнения.) // Применение ассоциативного массива // для создания телеФонной книжки. Зъпс1ийе <ъоветеав> Йтпс1ийе «вар> Зъпс1ийе <свстъпд> ивъпп павеярасе ятй; с1авв паве сЬат вст(40): риЬ11с: паве() ( астору(зг:т, "")г паве(онат *з] [ петеру(яет, з!г ) спат *пес() ( теситп встг ) // Определяем оператор < для объектов класса паве. Ьоо1 оретатот<(паве а, паве Ь) ( теситп встсгпр(а.пес(), Ь.пес() ) < 0] с1авз рпопеиив ( сиат вес[80]г риЬ11с: рнопенив() ( ястсп1р(зст, '"); ) рпопеиив(спас "в) ( ветсру(зст, я)г ) снап *дес(] ( теситп вгт; )г ъпс ваъп() ( вар<паве, рнопеиит> йътес Соту; // Заносим имена и номера в ассоциативный массив. йътессоту. Ьпяетс[ракс<паве, рпопенив>(паве("Том"), рпопеиив("555-4533")])г йътессоту.ъпяетс(райт<паве, рпопенив>(паве("Крыс" ), риопеншп("555-9678"!))г Часть 11.

Язык С++ гтьгессоту.йпэегх(райх<паве, р)големов>(паве("Джон" ), р)големов("555-8195")))г <11тестоту.йпэегх(ра1т<паве, рнопепов>(паве("Рейчел" ), рпопенпв("555-0809")))г // Находим номер теле4гона ло укаэанному имени. с)гат эст(80); сопт « "Введите иыя: с1п » эстг вар<паве, рнопет(ов»г:втехатот рг р = с(1тестоту.тьпу(паве(эсх))г ТГ(р != <тьтестоту.еп<)()) сост « "Номер телефоиаг " « р->весогк(.дет()г е1ве сост « "Такого имени в книжке нет.1п"г гесптп 0( ) Вот как выглядит примерный результат работы программы.

Ввепите имя: Рейчел Телефонный номер: 555-0809 В данном случае кюкдый элемент ассоциативного массива представляет собой символьный массив, в котором хранится строка, завершающаяся нулевым байтом. Позднее мы найдем более простой способ решить описанную задачу с помощью стандартного типа вст1пд. ~~4 АЛГОРИТМЫ Таблица 24.5. Стандартные алгоритмы длгйиим аазасепс Ыпа Находит лару соседних элементов, совпадающих между собой, и воз- вращает итератор, ссылающийся на их первое вхождение Выполняет бинарный поиск в упорядоченной последовательности Копирует последовательность Аналогичьи алгоритму сару(), ио копирование начинает с последнего элемента Ькпаку эеатсв сору сруь ь й Возвращает количество элементов последовательности сисек Глава 24. Введение в стандартную библиотеку шаблонов Как правило, солержимое контейнеров обрабатывается алгоритмами.

Хотя каждый контейнер определяет свой собственный набор основных операций, более сложные действия описываются в виде алгоритмов. Кроме того, они позволяют олновременно работать с двумя разными типами контейнеров. Для доступа к алгоритмам из библиотеки БТЬ в программу необходимо включить заголовок <а1ротШкв». В библиотеке БТЬ определено большое количество алгоритмов Они перечислены в табл. 24<8 Все алгоритмы представляют собой шаблонные функции. Это значит, что их можно применять к любому типу контейнеров.

Все шаблонные алгоритмы будут описаны в части 4, а в следующем разделе приведен иллюстративный пример. Продолжение табл. 24.5 Возвращает количество элементов последовательности, удовлетво- ряющих определенному условию Определяет, совпадают ли эпементь~ двух диапазонов Возвращает диапазон, в который можгю вставить элементы, не нару- шая порядок последовательности Заполняет диапазон заданным значением едпа 1 едпа1 галде Е111 И 1111 п Находит диапазон, содержащий заданное значение, и возвращает итератор, ссылающийся на его первое вхождение Находитдивпазон подпоспедовательности. Возвращает итератор, ус- тановленный на конец подпоследовательности, содержащейся в за- данном диапазоне Кхпд епгт 11па 11гвг ОК Находит первый элемент последовательности, совпадающий с эле- ментом из другой последовательности Находит первыи элемент последовательности, удовлетворяющий оп- ределенному услсаию Применяет функцию к диапазону элементов Присваивают элементам диагюэона значения, возвращенные функцией- генератором Определяет, содержит ли одна последовательность другую Объединяет один диапазон с другим.

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

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

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

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