Главная » Просмотр файлов » Г. Шилтд - Самоучитель C++ (PDF)

Г. Шилтд - Самоучитель C++ (PDF) (1114887), страница 66

Файл №1114887 Г. Шилтд - Самоучитель C++ (PDF) (Г. Шилтд - Самоучитель C++ (PDF)) 66 страницаГ. Шилтд - Самоучитель C++ (PDF) (1114887) страница 662019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

begin (while(p != Istl. end () ) (cout « *p;P++;}cout « endl;cout « "Содержимое второго списка :p - Ist2.begin() ;whileip != Ist2.end()) {cout « *p;cout « endl;// Слияние двух списковIstl.merge(Ist2);if {Ist2.empty() )cout « "Теперь второй список пуст\п";Глава14.Библиотекастандартныхшаблонов_443_cout « "Содержимое первого списка после слияния :\п";р = Istl. begin ( ) ;while (p 1= I s t l .

e n d O ) {cout « *p;return 0;После выполнения программы на экране появится следующее:Содержимое первого списка: ACEGIСодержимое второго списка: BDFHJТеперь второй список пустСодержимое первого списка после слияния:ABCDEFGHIJ6. В следующем примере список используется для хранения объектов типаProject. Project — это класс, с помощью которого организуется управлениепрограммными проектами.

Обратите внимание, что для объектов типа Projectперегружаются операторы <, >, != и ==. Перегрузки этих операторов требуеткомпилятор Microsoft Visual C+4- 5. (Именно этот компилятор использовалсяпри отладке примеров данной главы.) Для других компиляторов может потребоваться перегрузить какие-либо дополнительные операторы. В библиотеке стандартных шаблонов с помощью указанных оператор -функций сравниваются объекты, хранящиеся в контейнере.

Хотя список не является контейнером с упорядоченным хранением элементов, тем не менее и здесь припоиске, сортировке или слиянии элементы приходится сравнивать.^include <iostream>^include <list>#include <cstring>using namespace std;class Project {public:char name [40] ;int days_to_completion;ProjectO {strcpy (name, " ") ;days__to_completion = 0;}Project (char *n, int d) {strcpy {name, n) ;days_to_completion = d;\444Самоучитель C++void add_days(int i) (days_tcj_completion += i;void sub_days(int i) {days_to_completion -= i;}bool completed() { return !days_to_completion; }void report() {cout « name « ": ";cout « days__to_completion;cout « " дней до завершения\п";bool operator<(const Project &a, const Project sb)return a,days_to_completion < b.days_to_completion;bool operator>(const Project &a, const Project &b)ireturn a.days_to_completion > b.days_to_completion;bool operator==(const Project &a, const Project &b)return a.days_to_completion == b.days_to_completion;}bool operator!=(const Project &a, const Project &b)return a.days_to_completion != b.days_to_completion;int main()list<Project> proj;proj.push_back(Project("Разработка компилятора", 35});proj.push_back(Project("Разработка электронной таблицы", 190))proj.push_back(Project{"Разработка STL", 1000});list<Project>::iterator p = proj.begin(};// вывод проектов на экранwhile (p != proj.endO) {p->report(};P++;Глава 14.

Библиотека стандартных шаблонов445// увеличение сроков выполнения первого проекта на 10 днейр = proj.begin();p~>add_days{10);// последовательное завершение первого проектаdo {p->sub_days(5);p->report () ;} while (!p->completeci{) ) ;return 0;После выполнения программы на экране появится следующее:Разработка компилятора: 35 дней до завершенияРазработка электронной таблицы: 190 дней до завершенияРазработка STL: 1000 дней до завершенияРазработка компилятора: 40 дней до завершенияРазработка компилятора: 35 дней до завершенияРазработка компилятора: 30 дней до завершенияРазработка компилятора: 25 дней до завершенияРазработка компилятора: 20 дней до завершенияРазработка компилятора: 15 дней до завершенияРазработка компилятора: 10 дней до завершенияРазработка компилятора: 5 дней до завершенияРазработка компилятора: 0 дней до завершения1.

Поэкспериментируйте с представленными примерами. Попытайтесь делатьнебольшие изменения в программах и исследуйте результаты.2. В примере 1 после вывода информации на экран список опустел. В примере2 вы узнали об одном из способов исследования содержимого списка, прикотором он остается неповрежденным. Можете ли вы придумать другой способ просмотреть список, не опустошая его при этом? Продемонстрируйтеваше решение, заменив необходимые инструкции в программе из примера 1.3. Отталкиваясь от программы из примера 6, создайте еще один список, в котором представьте следующие проекты:ПроектСрок завершенияРазработка базы данныхРазработка стандартных писемРазработка объектов СОМ78050300446Самоучитель C++После создания второго списка выполните сортировку и затем слияние обоих списков.

Выведите на экран итоговый результат.14.5. Ассоциативные спискиКласс тар поддерживает ассоциативный контейнер, в котором каждому значению соответствует уникальный ключ. По существу, ключ — это просто имя,которое вы присваиваете значению. После того как значение помещено вконтейнер, извлечь его оттуда можно с помощью ключа. Таким образом, всамом общем смысле можно сказать, что ассоциативный список представляетсобой список пар ключ/значение. Преимущество ассоциативных списков состоит в возможности получения значения по данному ключу.

Например, используя ассоциативный список, можно хранить имена телефонных абонентовв качестве ключей, а номера телефонов в качестве значений. Ассоциативныеконтейнеры в программировании становятся все более и более популярными.Как уже упоминалось, в ассоциативном списке можно хранить только уникальные ключи. Дублирования ключей не допускается. Для создания ассоциативного списка с неуникальными ключами используется класс-контейнерmultimap.Ниже представлена спецификация шаблона для класса тар:template<class Key, class Т, class Comp = less<Key>,class Allocator = allocator<T»class mapЗдесь Key — это данные типа ключ, Т — тип данных, предназначенных дляхранения (в карте), a Comp - функция для сравнения двух ключей, которойпо умолчанию является стандартная объект-функция lessQ, Ключевое словоAllocator задает распределитель памяти (которым по умолчанию являетсяallocator).В классе тар определены следующие конструкторы:explicit map (const Comp &ф_сравн = СошрО,const Allocator Sa = Allocator());map (const map<Key, T, Comp, Allocator>fiooieJC!r) ;teroplate<class Inlter>map(Inlter начало, Inlter конец,const Comp &ф_сравн = CompO , const Allocator &a = Allocator ()) ;Первая форма представляет собой конструктор пустого ассоциативного списка.

Вторая форма конструктора предназначена для ассоциативного спискаиз одинаковых элементов, каждый из которых — это объект. Третья форма — это конструктор ассоциативного списка, содержащего диапазон элементов, заданный итераторами начало и конец. Функция сравнения ф_сравн,Глава 14. Библиотека стандартных шаблонов447если она присутствует, задает порядок сортировки элементов ассоциативного списка.Как правило, для любого объекта, заданного в качестве ключа, должны бытьопределены конструктор по умолчанию и несколько операторов сравнения.Для класса тар определяются следующие операторы сравнения:= = , <, <=, !=, >, >=В табл. 14.4 представлены функции — члены класса тар. В данной таблицетип key_type — это тип ключа, a key_value — тип пары ключ/значение (типpair < Key, T>).Таблица 14.4.

Функции — члены класса тарФункция-членОписаниеiterator beginf);Возвращает итератор первого элемента ассоциативного спискаconstjterator begin() const;void clear();Удаляет все элементы ассоциативного спискаsize_type count(const key_type &k) const;Возвращает 1 или 0, в зависимости от того,встречается или нет в ассоциативном спискеключ kbool emptyO const;Возвращает истину, если вызывающий ассоциативный список пуст, в противном случаевозвращает ложьiterator end();const_iterator end() const;Возвращает итератор конца ассоциативногоспискаpair<iterator, lterator>equal_range (constkey_type &k);pair<const_iterator,const_Iterator>equal_range(constkey^type &k) const;Возвращает пару итераторов, которые указывают на первый и последний элементы ассоциативного списка, содержащего указанныйключ kvoid erase(iterator /);Удаляет элемент, на который указывает итератор ivoid eraseflterator начало,iterator конец);Удаляет элементы, заданные между итераторами начало и конецsize_type erase(const key_type &k);Удаляет элементы,нию ключа kiterator find(const key_type &k);constjterator find(const key_type &k) const;Возвращает итератор по заданному ключу к.Если ключ не обнаружен, возвращает итератор конца ассоциативного спискаallocator_typeget_allocator() const;Возвращает распределитель памяти ассоциативного спискасоответствующие значе-Самоучитель C++448Таблица 14.4 (продолжение)Функция-членОписаниеiterator insertffterator /,const value_type ^значение);Вставляет параметр значение на место элемента или после элемента, заданного итератором i".

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

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

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

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