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

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

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

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

Сначала итератор р с помощью функции еп()() устанавливается на конец списка. Поскольку Глава 24. Введение в стандартную библиотеку шаблонов функция епд() возврашает итератор„установленный на объект„расположенный за последним объектом в списке, перед использованием итератор р следует уменьшить на единицу. Именно по этой причине итератор р в цикле вывода уменьшается перед выполнением оператора соцс, а не после. Никогда не слелует забывать, что функция епд() возврашает указатель не на последний элемент контейнера, а на юедуюя(ий за ним элемент. Сравнение функций ровЬ 1гоп1Ц и рова ЬаоЩ Список можно созлавать, добавляя элементы либо в его конец, либо в начало.

До сих пор мы добавляли элементы только в конец списка и применяли для этого функцию рай ъаси() . Для того чтобы добавить элементы в начало списка, следует вызвать функцию рпяь ясаке(). рассмотрим пример. /* Демонстрация различий между функциями рцяи Ъаск() и рцяи сходе(). *у Вьпс1цсте <ьояххеат> Мьпс1цое <11яс> ияьпд пязаеярасе яхбн ьпс мазо() ( 11ЯС<апх> 1яс1, 1яс2з ьпс йох(1=0; 1<10; 1++) 1яС1.рави Ъасх(1); сох(1=0; 1<10; 1++) 1яС2.рсяЪ йхопх(1)з 11яс<ьпс>::ьсехасох р; сосо « "Содержимое списка 1яС1: М"; р = 1ях1.Ъес(ьп(); >Ъ11е(р .'= 1яс1.епс)()) ( соцс « *р « р++; соцс « "1пхп" з соцх « "Содержимое списка 1яС2г тп"'; р = 1яс2.Ъедьп(): мЪ11е(р )= 1яс2.епс)()] ( соцс « *р « р+е' ) хесцхп Оз ) Эта функция выводит на экран слелуюшие результаты.

содержимое списка 1яс1: 0 1 2 3 4 5 6 7 8 9 Содержимое списка 1ях2: 9 8 7 6 5 4 3 2 1 О Поскольку при создании списка 1яс2 элементы добавлялись в начало, порядок их следования противоположен порядку следования элементов в списке 1вс1, при создании которого они добавлялись в конец. Часть П. Язык С++ Сортировка списка Список можно упорядочить, вызвав функцию-член вове() .

Следующая программа создает список, состоящий из случайных целых чисел, а затем сортирует их в порядке возрастания. // Сортировка списка. 41пс1пс)е <1овг сеат» $1пс1ис)е <11вс> 41пс1пде <свсс)11Ь> ивхпд пазеврасе вод; 1пе паап() ( 11вс<1пс> 1вс; 1пе 1ю // Создаем список, состоящий иэ случайных целых чисел.

бот(1=0; а<10; 1++) 1вс.рави Ьас)г(тапс)()); соус « "исходное содержимоег хп") 11вс<1пс>:".1сехасох р = 1зе.Ьед1п()) ыЬ11е(р ! = 1зс,епс)() ) ( сопс « *р « р~< сопс « епс)1 « епс)1/ // Упорядочиваем список. 1зе.ветс(); попс « "Упорядоченное содержимое:1п"; р = 1вс.Ьед1п(); зи11е(р != 1вс.епй()] ( сопс « *р « р++; ) хе-пгп О/ ) Вот как выглялит примерный вывод этой программы. Исходный список: 41 18467 6334 26500 19169 15724 11478 29358 26962 24464 Упорядо юенный список: 41 6334 11478 15724 18467 19169 24464 26500 269262 29358 Вставка одного списка в другой Упорядоченный список можно вставить в лругой список, Результатом этой операции является упорядоченный список, отстоящий из элементов исходных списков. Новый список хранится в вызывающем объекте, а второй список становится пустым. Эта операция иллюстрируется следуюшил» примером.

Первый список состоит из четных чисел от О до 9. Второй список состоит из нечетных чисел. После слияния этих списков образуе~ся последовательность О ) 2 3 4 5 б 7 8 9. Глава 24. Введение в стандартную библиотеку шаблонов // Слияние двух списков. Фтпс1иг)е <1овстеагп> $1пс1иг)е <1звс> пв).пд паиеврасе всг); Тпс иа1пО ( 11вт<ьпт> 1вт1, 1втг; Тпс 1у тот(1=0/ 1<10; 1+=2) 1вт1.рпвп Ьас)с(1); тот(1=1г 1<11; 1+=2) 1втг.рпви Ьас)г(1); попс « "Содержимое списка 1вс1т вп"; 1твс<ьпс>::зсетасот р = 1вс1.ьедьп(); нЬ11е(р != 1вс1.епг)О ) сопс « "р « ) солт « епб1 « епс)1; солт « "Содержимое списка 1втгт ьп"> р = 1вс2.Ьедгп(); ьи11е(р )= 1вег.епг)О ) ( соус « *р « р++ ~ ) солт « епг)1 « епг)1; // Объединяем два списка.

1вс1.иетде (1вт2) г 11(1втг.еиртуО ) солт « "Теперь список 1ве2 пуст1п'; СОУС « "СОЛЕржИМОЕ СПИСКа 1ВС1 ПОСЛЕ СЛИяНИяь 1П"; р = 1вт1.ЬедьпО; ин11е(р != 1вс1.епг)О ) ( сопс « "р « " ° г р++г ) тееитп ог ) Рассмотрим результаты работы этой программы, Содержимое списка 1вт1: 0 г 4 6 а Содержимое списка 1ве1: 1 3 5 7 9 теперь список 1вс2 пуст Содержимое списка 1вт1 после слияния: 0 1 2 3 4 5 6 З 8 9 Этот пример имеет еше олпу особенность, связанную с прилгенением функции епвгсу() . Если вызывающий контейнер пуст, она возврашает значение стае.

Обратите внимание на то, что функция завтде() улаляет все элементы из списка, поллежашего вставке. Результаты работы программы это подтверждают. Часть!1. Язык С++ Список, содержащий объекты класса Рассмотрим пример. в котором используется список объектов класса гнуе1авв. Обратите внимание на то, что в этом классе перегружаются операторы "<'*, ">", ">ее и " ". (При работе с некоторыми компиляторами это делать не обязательно, в то же время другие компиляторы вынуждают перегружать е>це и дополнительные операторы.) В библиотеке ЗТ(.

эти операторные функции используются для сравнения объектов, хранягцихся а контейнере. Даже если список не упорядочен, иногда приходится сравнивать элементы при поиске, сортировке или слиянии. // Список„ солеркаший объекты. №йпс1ибе <йов»теазп> №йпс1пде <11в»> №йпс1иде <св»т1пя> ивйпя пагаеврасе в»с): с1авв пус1авв ( 1п» а, Ьг йп» вшю рпЬ11с ~ геус1авв[> ( а = Ь = 0; ) эгус1авв(гп» 1, йп» б> ( а=в; Ь=Зг вше = а + Ь; ) йп» де»вша[) ( ге»пгп яшю Ъоо1 орега»от<(сопя» гзус1авв йо1, сопя» пус1авв йо2> ( ге»птп о1.вша « о2.вшзг Ьоо1 орега»ог>(сопв» п1ус1авв йо1, сопя» пус1авв йо2) ( те»птп о1.вша > о2.ягипг ) Ьоо1 орега»от==(сопя» пус1авв йо1, сопв» гхус1авв йо2) ( ге»пгп о1.

вша == о2.впп; Ьоо1 орета»от>=(сопя» геус1авв йо1, сопя» гаус1авв йо2) ( те»игп о1.яшз != о2.вшю ) Глава 24. Введения в станйартнув библиотеку шаблонов Ыепс> Ьоо1 №тйепб Ьоо1 гт1епс) Ьоо1 гг1епб Ьоо1 орега»от< (сопя» пус1авв йо1, сопв» пус1авв йо2>г ореха»ог>(сопя» пус1авв йо1, сопв» агус1авв йо2); орета»от== (сопя» гпус1авв йо1, сопя» шзс1аяв йо2>; орета»ог>=[сопя» геус1авв йо1, сопя» пус1авв йо2>г 1пс иазп() ( зпс з.з // Создаем первый список. 11вс<тус1авв> 1ве1/ год(з.=Оз з'.<10з 1++) 1вс1.рпвЬ Ьася(лзус1авв(1, з))з соил « "Первый список: 11ВС<муо1ааа>Ззебвтаесд Р = 1ВС1.ЬЕд1П() мЬ11е(р != 1ве1.епб() ) ( соне «р->деевом() « р++з соме « епй1з // Создаем второй список.

11вс<зтус1авв> 1вс2з бог(1=0з 1<10з 1++) 1ве2.рнвЬ Ьасй(иус1авв(1*2, з*3)) сонб « "Второй список: р = 1ве2.Ьедз.п() з иЬ11е(р з= 1вс2.епб()] ( соне « р->дегани() « Гз++ з сопс «епб1з // Выполняем слияние списков 1вс1 и 1ве2. 1ве1.иегде(1ве2) з // Выводим на экран объединенный список. соне « "Объединенный список: р = 1вс1.Ьедзл() з ийз1е(р ! = 1всг.еп<)() ) ( соус «р->деевом() « р++з ) геспгп Оз ) Программа создает два списка, содержащих объекты класса взус1ввв, и выводит на экран содержимое кажлого списка.

Затем она выполняет слияние списков и выводит результат, приведенный ниже. | Первый списокз 0 2 4 6 8 10 12 14 16 18 Второй список: О 5 10 15 20 25 30 35 40 45 Объединенный список: 0 0 2 4 5 6 8 10 12 14 15 16 18 20 25 30 35 40 45 Й| Ассоциативные контейнеры ~'<Я Класс вар создает ассоциативный контейнер, в котором каждому ключу соответствует единственное значение. По существу, ключ представляет собой имя, с помощью которого лквкно получить требуемое значение.

Если в контейнере зазанится некое значение, доступ 524( Част И. Я С+т к нему возможен только через юпоч. Таким образом, ассоциативный контейнер фактически хранит пары ключ-значение. Преимущество ассоциативных массивов заключается в доступе к значениям по их ключам. Например, можно создать ассоциативный контейнер, в котором ключом является имя человека„а значением — номер его телефона. В настоящее время ассоциативные контейнеры получают все более широкое применение. Как указывалось ранее, ассоциативные контейнеры могут содержать лишь уникальные ключи.

Лубликаты не допускаются. Если необходимо создать ассоциативный контейнер, в котором можно хранить лубликаты, следует применять класс во1сяаес. Шаблонная спецификация класса юэар имеет следующий вид. сетзр1асе <с1авя кеу, с1авя т, с1аяя сопр = 1евя<кеу>, с1авя й11осагсг = а11осаесг<ра1г<сопве )<еу,т» с1авя вар Здесь класс кеу определяет тип ключа, шаблонный параметр т задает тип данных, хранящихся в ассоциативном массиве, а функция с<вар позволяет сравнивать два ключа. По умолчанию в качестве функции совр применяется станлартный функтор 1евв().

распределитель памяти задается классом й11осаеог, причем по умолчанию используется стандартный класс а11осасог. Класс мар имеет следующие конструкторы. ехр1ю сгг юзар(сопве Сспр асюююрГп=Сотар(), сопят й11ссаеог Ьа = й11осаеог())Ю вюзр(попас тоар<кеу,Т,Союзр,й11осасог> ьоЬ)ю сеяр1асе <с1авв 1п1сег>1зяс(тп1сег мап, 1пхсег еа(, сопят союпр а<труп = сспюр(), сопяе й11ссаесг аа = й11осасог(])ю Таблица 24.4. Функции, определенные в классе гпар Функцию>член Описание зсегасог Ьея1п()ю сопвг зеегаеог Ьеязп() сопвсю Возвращает итератор, установленный на первый эле- мент ассоциативного массива Удаляет из ассоциативного массива все элементы чоза с1еаг()ю в1яе суре сочпе (сопвг кеу суре ая) сопвгю Возвращает текущее количество дубликатов элемента со значением )г в ассоциативном массиве Возвращает значение егия, если ассоциативный массив пуст, в противном случае возвращает значение еа1ве Возвращает итератор, установленный на первый эле- мент ассоциативного массива Ьоо1 еяреуы еопвею 1еегаеог епа() ю сопев 1еегасог епа() сопвгю ага Глава 24.

Введение в стандартную библиотеку шаблонов Первая версия конструктора создает пустой ассоциативный массив. Вторая — ассоциативный контейнер, солержаший элементы объекта оЬ. Третий вариант конструктора создает ассоциативный массив, состоящий из элементов, лежащих в диапазоне, заданном итераторами агап и елс(. Функция стартал определяет порядок следования элементов массива.

Как правило, любой объект, использующийся в качестве ключа. должен опрелелять конструктор по умолчанию, а также оператор "<'* и другие операторы сравнения. Специфические требования, предъявляемые к ключам, зависят от компилятора. В классе мар определены следующие операторы сравнения: «, =, (кы », и Некоторые функции-члены, определенные в классе юкар, перечислены в табл. 24.4. В этой таблице класс )сеу суре прелставляет собой тип ключа, а класс ча1це суре определяет тип ра1г<кеу. т>.

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

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

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

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