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

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

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

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

По умолчанию распределителем памяти является объект класса а!1осагог, но вы можете определить собственный распределитель памяти, если хотите возложить на него какие-нибудь необычные функции. В большинстве случаев достаточно распределителя памяти, заданного по умолчанию. В некоторых алгоритмах и контейнерах используется функция особого типа, называемая предикатом !ргейсаге). Предикат может быть бинарным или унарным. У унарного предиката один аргумент, а у бинарного — два. Возвращаемым значением этих функций является значения истина либо ложь.

Точные условия получения того или иного значения определяются программистом. Все унарные предикаты, которые будут упомянуты в этой главе, имеют тип Т1пРгей, а все бинарные — В1пРгсс!. Аргументы бинарного предиката всегда расположены по порядку: первый, второй. Тип аргументов как унарного, так и бинарного предиката соответствует типу хранягцихся в контейнере объектов. В некоторых алгоритмах и классах используется специальный тип бинарного предиката, предназначенный для сравнения двух элементов. Такой предикат называется функцией сравнения !'сотрапюп)апет!оп).

Функция сравнения возвращает истину, если ее первый аргумент меньше второго. Типом функции сравнения является тип Сотр. Помимо заголовков для разнообразных классов-контейнеров, входящих в библиотеку стандартных шаблонов, стандартная библиотека С++ включает также заголовки <ц1Й(у> и <1цпс11опа1>, предназначенные для поддержки классов-шаблонов. Например, заголовочный файл <!г011гу> содержит определение класса-шаблона ра1г (пара), в котором могут храниться пары значений. Позднее в этой главе мы еще воспользуемся шаблоном ра1г. Шаблоны из заголовочного файла <Йпейопа1> помогают создавать объекты, определяющие оператор-функцию орега1огО.

Эти объекты называются обьектами-функциями 9йпсГгоп оо)ест) и во многих случаях могут использоваться вместо указателей на функцию. В заголовочном файле <йше6опа1> объявлено несколько встроенных объектов-функций, некоторые из которых перечислены ниже: Самоучитель С++ 424 тивный код. Тем не менее для целей данной главы (обзор библиотеки стандартных шаблонов) объекты-функции не нужны и непосредственно применяться не будут. Хотя сами по себе объекты-функции не представляют особой сложности, их подробное обсуждение достаточно продолжительно и выходит за рамки нашей книги.

Этот материал вам следует освоить самостоятельно, если в будущем вы захотите использовать библиотеку стандартных шаблонов с максимальной эффективностью. 1. Что представляют собой контейнеры, алгоритмы и итераторы, входящие в библиотеку стандартных шаблонов? 2. Какие вы знаете два типа предикатов? 3. Какие существуют пять типов итераторов? Ранее уже объяснялось, что контейнерами называются объекты библиотеки стандартных шаблонов, непосредственно предназначенные для хранения данных.

В табл. 14.1 перечислены контейнеры, определенные в библиотеке стандартных шаблонов, а также заголовки, которые следует включить в программу, чтобы использовать тот или иной контейнер. Хотя строковый класс, который управляет символьными строками, также является контейнером, ему будет посвящен отдельный раздел. Таблица т4. т. Контейнеры, определенные в библиотеке стандартных шаблонов Контейнер Описание Множество битов Двусторонняя очередь Линейный список Ьйвет песце <й81> <тар> гоар тцйлпар <тар> щийве1 <вет> Очередь с приоритетом Очередь рпогйу древе диеце <доеое> <дцеое> 14.2.

Классы-контейнеры Ассоциативный список для хранения пар ключ/значение, где с каждым ключом связано только одно значение Ассоциативный список для хранения пар ключ/значение, где с каждым ключом связано два или более значений Множество, в котором каждый элемент не обя- зательно уникален Заголовок <изет> <берне> Глава 14. Библиотека стандартных шаблонов Таблица 14. 1 (продолжение) Контейнер Описание Заголовок Множество, в котором каждый элемент уникален <зет> ве! <з!аск> <чесФог> з1аск Стек Динамический массив чесФог Поскольку имена типов элементов, входящих в объявление класса-шаблона, могут быть самыми разными, в классах-контейнерах с помощью ключевого слова ФурейеГобъявляются некоторые согласованные версии этих типов. Эта операция позволяет конкретизировать имена типов.

Ниже представлены имена типов, конкретизированные с помощью ключевого слова гурег!еГ, которые можно встретить чаще других: Согласованное имп типа Описание Хотя изучить все контейнеры в рамках одной главы невозможно, в следую- щих разделах рассказывается о трех из них: векторе, списке и ассоциатив- ном списке. Если вы поймете, как работают эти три контейнера, то с дру- гими классами библиотеки стандартных шаблонов у вас проблем не будет. 14.3. Векторы Вероятно, самым популярным контейнером является вектор. В классе чесгог поддерживаются динамические массивы.

Динамическим массивом называется массив, размеры которого могут увеличиваться по мере необходимости. Как известно, в С++ в процессе компиляции размеры массива фиксируют- в1ае Фуре геФегепсе сопзФ ге$егепсе 1ФегаФог сопзФ !ФегзФог гечегзе 1ФегзФог сопзФ гечегзе 1ФегзФог чз!ие Фуре айосаФог Фуре кеу Фуре кеу соптраге ча1ие соглраге Интегральный тип, эквивалентный типу в!ге Ф Ссылка на элемент Постоянная ссылка на элемент Итератор Постоянный итератор Обратный итератор Постоянный обратный итератор Тип хранящегося в контейнере значения Тип распределителя памяти Тип ключа Тип функции, которая сравнивает два ключа Тип функции, которая сравнивает два значения 426 Самоучитель С++ ся. Хотя это наиболее эффективный способ реализации массивов, одновременно он и самый ограниченный, поскольку не позволяет адаптировать размер массива к изменяющимся в процессе выполнения программы условиям.

Решает проблему вектор, который выделяет память для массива по мере возникновения потребности в этой памяти. Несмотря на то, что вектор является, по сути, динамическим массивом, для доступа к его элементам подходит обычная индексная нотация, которая используется для доступа к элементам стандартного массива. Ниже представлена спецификация шаблона для класса чес(ог: свар1аса<с1авв т, с1авв д11осаеог = а11осаеог<Т»с1авв уесСог Здесь Т вЂ” это тип предназначенных для хранения в контейнере данных, а ключевое слово А11оса(ог задает распределитель памяти, который по умолчанию является стандартным распределителем памяти.

В классе чес(ог определены следуюшие конструкторы: ехр11с1е чвсвог(сопвв а11осаеог Еа = А11осавог()); ехр11сьг часФог (вьвв Фуре число, сопев Т авиачввив = Т() сопев А11осаеог аа = Ю1осавог () ); часгог(сопвп чвсвог~Т, й3.1осавог>ьооъвхт) гвар1агв<с1авв 1пПег> ювссог(1пхваг начало, тп1Еег гонец, сопве М.1осаеог йа = Л11осаеог ()); Первая форма представляет собой конструктор пустого вектора. Во второй форме конструктора вектора число элементов — это число, а каждый элемент равен значению значение. Параметр значение может быть значением по умолчанию. В третьей форме конструктора вектор предназначен для одинаковых элементов, каждый из которых — это обьентн.

Четвертая форма — это конструктор вектора, содержащего диапазон элементов, заданный итераторами ничане и конец. Для любого объекта, который будет храниться в векторе, должен быть определен конструктор по умолчанию. Кроме этого, для объекта должны быть определены операторы < и ==. Для некоторых компиляторов может потребоваться определить и другие операторы сравнения. (Для получения более точной информации обратитесь к документации на ваш компилятор.) Для встроенных типов данных все указанные требования выполняются автоматически. Хотя синтаксис шаблона выглядит довольно сложно, в объявлении вектора ничего сложного нет. Ниже представлено несколько примеров такого объявления: лесков<где> М; создание вектора нулевой длины для целых чесгог<сЛаг> сч(5); уу создание нятизлементново вектора для символов Глава 24.

Библиотека сгандвртныхваблолол чессок<слаг> сч15, 'х'1; // создание и инициализация пятиэлементного вектора Лля сииволов гесгок<тпе> тч2 (тч1; создание вектора для целых // иэ вектора для целых Для класса тес(ог определяются следующие операторы сравнения: «, 7 7 >, >= Таблица 14.2. Функции — члены класса иеогог Функция-член Описание Присваивает вектору последовательность, определенную итераторами начало и конец (е!пр!а(е<с1авв !пйег> чо1б авв(дп(1пйег начало, 1пйег конец); кептр1а(е<с1ааа 81ке, с1авв Т> чо1д авв19п(81ке число, сопв( Т езиачение - Т(И; Присваивает вектору число элементов, причем значение каждого элемента равно параметру значение Возвращает ссылку на элемент, заданный параметром ! ге1егепсе а~(в(ве 1уре Г)' сопв1 ге(егепсе ат(в!ке туре !) сопвт; Кроме этого для класса чес(ог определяется оператор индекса Ц, что обеспечивает доступ к элементам вектора посредством обычной индексной нотации, которая используется для доступа к элементам стандартного массива.

В табл. 14.2 представлены функции — члены класса чес(ог. (Повторяем, не нужно пугаться необычного синтаксиса.) Наиболее важными функциями- членами являются функции виео, Ьея(п(), епд(), рцвЬ ЬасЦ), (пвсг(О и егаве(). Функция яхе9 возвращает текущий размер вектора. Эта функция особенно полезна, поскольку позволяет узнать размер вектора во время выполнения программы. Помните, вектор может расти по мере необходимости, поэтому размер вектора необходимо определять не в процессе компиляции, а в процессе выполнения программы.

Функция Ьерп() возвращает итератор начала вектора. Функция епдО возвращает итератор конца вектора. Как уже говорилось, итераторы очень похожи на указатели и с помощью функций ЬеяшО и епй() можно получить итераторы (читай: указатели) начала и конца вектора. Функция рцзЬЛЬасЬ(1 помещает значение в конец вектора. Если это необходимо для размещения нового элемента, вектор удлиняется. В середину вектора элемент можно добавить с помощью функции (пвег((). Вектор можно инициализировать.

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

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

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

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