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

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

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

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

Для соединения (Join) двух списков нужна функция splice(), а для слияния (merge) — функция merge().Для любого типа данных, которые вы собираетесь хранить в списке, долженбыть определен конструктор по умолчанию. Кроме этого, необходимо определить различные операторы сравнения. К моменту написания этой книгиточные требования к объектам, предназначенным для хранения в списке, уразных компиляторов были разными, поэтому перед использованием спискатщательно изучите техническую документацию на ваш компилятор.Таблица 14.3.

Функции — члены класса listФункция-членОписаниеtemplate<class lnlter>void assignflnlter начало,Inlter конец);Присваивает списку последовательность, определенную итераторами начало и конецtemplate<class Size, class T>void assign (Size число,const Т &значение - T());Присваивает списку число элементов, причемзначение каждого элемента равно параметрузначениеreference b a c k ( ) ;const__reference backf) const;Возвращает ссылку на последний элементспискаiterator beginf);constjterator begin() const;Возвращает итератор первого элемента спискаvoid clear();Удаляет все элементы спискаbool emptyO const;Возвращает истину, если вызывающий списокпуст, в противном случае возвращает ложьiterator cnd();const_iterator end() const;Возвращает итератор конца спискаIterator erasefiterator /);Удаляет элемент, на который указывает итератор /.

Возвращает итератор элемента, который расположен следующим за удаленнымiterator erasefiterator начало^iterator конец);Удаляет элементы, заданные между итераторами начало и конец. Возвращает итераторэлемента, который расположен следующим запоследним удаленнымreference frontf);const_reference front() const;Возвращает ссылку на первый элемент спискаallocator_typeget_allocator() const;Возвращает распределитель памяти спискаГлава 14. Библиотека стандартных шаблонов437Таблица 14.3 (продолжение)Функция-членОписаниеiterator insertflterator i,const Т &значение = Т());Вставляет параметр значение перед элементом, заданным итератором /. Возвращает итератор элементаvoid insert(iterator j,size_type число,const Т &значение);Вставляет число копий параметра значениеперед элементом, заданным итератором itemplate<class lnlter>void insert(iterator /,Inlter начало,Inlter конец);Вставляет последовательность, определеннуюмежду итераторами начало и конец, передэлементом, заданным итератором isize_type max_size() const;Возвращает максимальное число элементов,которое может храниться в спискеvoid merge(list<T,Allocator> &объект);template<class Comp>void merge(llst<T,Allocator> &объект,Comp ф^сравн);Выполняет слияние упорядоченного списка,хранящегося в объекте объект, с вызывающим упорядоченным списком.

Результат упорядочивается. После слияния список, хранящийся в объекте объект становится пустым.Во второй форме для определения того, является ли значение одного элемента меньшим,чем значение другого, может задаватьсяфункция сравнения ф_сравнvoid pop_back();Удаляет последний элемент спискаvoid pop_front();Удаляет первый элемент спискаvoid push_back(constТ ^значение);Добавляет в конец списка элемент, значениекоторого равно параметру значениеvoid p u sh__f го nt( constТ & значение);Добавляет в начало списка элемент, значениекоторого равно параметру значениеreversejterator rbeginf);const.reversejteratorrbeglnO const;Возвращает обратный итератор конца спискаvoid remove(constУдаляет из списка элементы, значения которых равны параметру значениеtemplate<class UnPred>void remove_lf(UnPred пред);Удаляет из списка значения, для которых истинно значение унарного предиката предreversejterator rend();const_reverse_iteratorrendO const;Возвращает обратный итератор начала спискаvoid resize(size_type число,Т значение = T());Изменяет размер списка в соответствии спараметром число.

Если при этом списокудлиняется, то добавляемые в конец спискаэлементы получают значение, заданное параметром значениеvoid reverse!);Выполняет реверс (т. е. реализует обратныйпорядок расположения элементов) вызывающего спискаТ &значение);Самоучитель C++438Таблица 14.3 (продолжение)Функция-членОписаниеsizejtype size() const;Возвращает хранящееся на данный момент всписке число элементовvoid sort();Сортирует список. Во второй форме для определения того, является ли значение одногоэлемента меньшим, чем значение другого,можетзадаватьсяфункциясравненияф_сравнtemplate<class Comp>void sort Comp ф_сравн);void splicefiterator /,list<T, AHocator> &объекг);Вставляет содержимое объекта объект в вызывающий список. Место вставки определяется итератором /.

После выполнения операцииобъект становится пустымvoid spllcefiterator i,list<T, Allocator> &объект,iterator элемент);Удаляет элемент, на который указывает итератор элемент, из списка, хранящегося вобъекте объект, и сохраняет его в вызывающем списке. Место вставки определяетсяитератором /void splicefiterator /,list<T, Allocator> Лобьскг,iterator начало,iterator конец);Удаляет диапазон элементов, обозначенныйитераторами начало и конец, из списка,хранящегося в объекте объект, и сохраняетего в вызывающем списке. Место вставкиопределяется итератором /void swap(list<T,Allocator> & объект);Обменивает элементы из вызывающего списка с элементами из объекта объектvoid unlque();template<class BinPred>void unique(BinPred пред);Удаляет из вызывающего списка парные элементы, Во второй форме для выяснения уникальности элементов используется предикатпредрПримеры1.

Ниже представлен пример простого списка.// Основные операции списка^include <iostream>^include <list>using namespace std;int main i)list*^char> 1st; // создание пустого спискаint i;for{i=0; i<!0; i++) 1st .push_back ( 'A' + i)cout « "Размер = " « 1st.

size () « endl;Глава 14. Библиотека стандартных шаблонов439list<char>::iterator p;cout « "Содержимое: ";while(!1st.empty(}) {p = lst.begin();cout « *p;1st.pop f r o n t ( ) ;return 0;После выполнения программы на экране появится следующее:Размер = 10Содержимое: ABCDEFGHIJВ этой программе создается список символов. Сначала создается пустой список. Затем туда помещается десять символов (буквы от А до J включительно).Зга операция выполняется с помощью функции push_back(), которая помещает каждое следующее значение в конец существующего списка.

Далее размер списка выводится на экран. После этого организуется вывод на экрансодержимого списка, для чего каждый раз последовательно извлекают, выводят на экран и удаляют очередной первый элемент списка. Этот процесспродолжается, пока список не опустеет.2. В предыдущем примере, пройдя список от начала до конца, мы его опустошили. Это, конечно, не обязательно.

Ниже представлена переработаннаяверсия программы.#include <iostream>^include <list>using namespace std;int main{)list<char> 1st;int i;for{i=0; i<10; i++) 1st-push_back('A1 + i};cout « "Размер = " « 1st.size () « endl;list<char>::iterator p = lst.begin{);cout « "Содержимое: ";while(p != 1st.end(}) {cout « *p;440Самоучитель C++return 0;J.В данной программе итератор р инициализируется таким образом, чтобы онуказывал на начало списка, Затем при каждом проходе цикла итератор р инкрементируется, что заставляет его указывать на следующий элемент списка.Цикл завершится, когда итератор р укажет на конец списка.3. Поскольку список является двунаправленным, размещать элементы в немможно как с начала списка, так и с его конца.

В следующей программе создается два списка, причем во втором списке организуется обратный первомупорядок расположения элементов.// Элементы можно размещать не только начиная с начала списка,// но также и начиная с его конца^include <iostream>^include <list>using namespace std;int main()(list<char> 1st;list<char> revlst;int i;for(i=0; i<10; i-H-) 1st .push_back ('A' + i) ;cout « "Размер прямого списка = " « 1st.size () « endl;cout « "Содержимое прямого списка: ";list<char>;:iterator p;// Удаление элементов из первого списка//и размещение их в обратном порядке во втором спискеwhile(!1st.empty{)) {р = 1st.begin();cout « *р;1st.pop_front!);revlst.push_front(*p);}cout « endl;cout « "Размер обратного списка = ";cout « revlst.size() « endl;cout « "Содержимое обратного списка: ";р = revlst.begin();while(р != revlst.end{)) {cout « *p;P+-H;Глава14.Библиотекастандартныхшаблонов_ 447return 0;1После выполнения программы на экране появится следующее:Размер прямого списка = 10Содержимое прямого списка: ABCDEFGHIJРазмер обратного списка = 10Содержимое обратного списка: JIHGFEDCBAВ данной программе реверс списка 1st достигается следующим образом: элементы поочередно извлекаются из начала списка 1st и размешаются в началесписка revlst.

Таким образом в списке revlst реализуется обратный порядокрасположения элементов.4. Вызвав функцию-член sortQ, вы можете отсортировать список. В следующейпрограмме создается список случайных символов, а затем эти символы сортируются.// Сортировка списка^include <iostream>^include <list>tinclude <cstdlib>using namespace std;int main(){list<char> 1st;int i ;// заполнение списка случайными символамиfor(i=0; i<10; i++) 1st .push_back ( 'A' + (rand { ) %26) } ;cout « "Исходное содержимое : " ;list<char>: : iterator p = Ist.beginf);while (p != 1st.

end!) ) {cout « *p;cout « endl;// сортировка списка1st . sort ( } ;cout « "Отсортированное содержимоеp = lst.begin() ;while (p != 1st. end () ) {cout « *p;442_СамоучительC++return 0;)После выполнения программы на экране появится следующее:Исходное содержимое : PHQGHUMEAYОтсортированное содержимое: AEGHHMPQQY5. Отсортированный список можно слить с другим. В результате будет полученновый отсортированный список с содержимым, состоящим из содержимогообоих исходных списков.

Новый список остается в вызывающем списке, авторой список оказывается пустым. Ниже представлен пример слияния двухсписков. В первом находятся символы ACEGI, а во втором — BDFHJ. Послеслияния мы получим последовательность ABCDEFGHIJ.// Слияние двух списков^include <io5tream>#include <list>using namespace std;int main ( ){list<char> Istl, Ist2;int i;for (1=0; i<10; i+=2) Istl .push_back ( 'A1 + i) ;for (1=1; i<ll; i+=2) Ist2 .push_back ( 'A' + i) ;cout « "Содержимое первого списка :list<char>; : iterator p = Istl.

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

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

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

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