Программирование >>  Расширенная версия языка c++ 

1 ... 135 136 137 [ 138 ] 139 140 141 ... 227


Повторение пройденного

Перед тем как необходимо правильно ответить на следующие

вопросы и сделать упражнения. .

1. Объясните, зачем в C++ были добавлены пространства имен.

2. Как задать постоянную функцию-член?

3. Модификатор mutable (модифицируемый) позволяет пользователю вашей программы изменить библиотечную функцию. Так ли это?

4. Дан следующий класс: -л , !..:

class X { .- :

а, b; , , , . , : , - .. .v.

public: \ .

X(int i, int j) { a = i, b = j; } . , , .

создайте здесь функцию преобразования в целое ,

Создайте функцию преобразования, возвращаемым значением которой была бы сумма переменных а и

5. Статическая переменная - член класса может использоваться еще до создания объекта этого класса. Так ли это?

6. Дан следующий класс:

class Demo {

int а; , .\ .

public: . . .

explicit (int i) { a = i; }

in a() { return a; }

Допустимо ли следующее объявление:

Demo о 10;

всех ее свойств, нюансов и приемов программирования хватило

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

Помимо библиотеки стандартных шаблонов в этой главе описан один из

наиболее важных новых классов C++ - строковый класс (string class). Строковый класс определяет строковый тип данных, что позволяет с помощью операторов работать с символьными строками почти так же, как это делается с данными других типов.



/лава 14. Библиотека стандартных шаблонов 421

14.1. Знакомство с библиотекой стандартных шаблонов

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

Ядро библиотеки стандартных шаблонов образуют три основополагающих элемента: контейнеры, алгоритмы и итераторы. Эти элементы функционируют в тесной взаимосвязи друг с другом, обеспечивая искомые решения проблем программирования.

Контейнер ainers) - это объекты, предназначенные для хранения других объектов. Контейнеры бывают различных типов. Например, в классе vector (вектор) определяется динамический массив, в классе queue (очередь) - очередь, в классе list (список) - линейный список. Помимо

базовых контейнеров, в библиотеке стандартных шаблонов определены также ассоциативные контейнеры (associative containers), позволяющие с помощью ключей (keys) быстро получать хранящиеся в них значения. Например,

в классе тар (ассоциативный список) определяется ассоциативный список, обеспечивающий доступ к значениям по уникальным ключам. №ть, в ассоциативных списках хранятся пары величин ключ/значение, что позволяет при наличии ключа получить соответствующее ключу значение.

В каждом классе-контейнере определяется набор функций для работе! с

этим контейнером. Например, список содержит функции для вставки, удаления и слияния (merge) элементов. В стеке имеются функции для размещения элемента в стеке и извлечения его из стека.

Алгоритмы (algorithms) выполняют операции над содержимым контейнеров. Существуют алгоритмы для инициализации, сортировки, поиска или замены содержимого контейнеров. Многие алгоритмы предназначены для работы с последовательностью (sequence), которая представляет собой линейный список элементов внутри контейнера.

Итераторы (iterators) - это объекты, которые по отношению к контейнерам играют роль указателей. Они позволяют получать доступ к содержимому контейнера примерно так же, как указатели используются для доступа к элементам массива. Имеется пять типов итераторов, которые описаны ниже:

Итератор Описание

Произвольного доступа Используется дл вания и записи значений. Доступ

(random access) к элементам произвольный

Двунаправленный Используется для считывания и записи значений. Может

(bidirectional) проходить контейнер в обоих направлениях



(продолжение)

Итератор Описание

Однонаправленный Используется тывания иси значений. Может

(forward) проходить контейнер только в одном направлении

Ввода . , Используется только для считывания значений. Может

(input) проходить контейнер только в одном направлении

Вывода Используется только для записи значений. Может прохо-

(output) дить контейнер только в одном направлении

(Не запутайтесь. По аналогии с потоковым вводом/выводом под вводом понимается ввод информации из контейнера, т. е. считывание, а под выводом - вывод информации в контейнер, т. е. запись, - примеч. пер.)

Как правило, итератор с большими возможностями доступа к содержимому контейнера может использоваться вместо итератора с меньшими возможностями. Например, однонаправленным итератором можно заменить итератор ввода.

С итераторами можно работать точно так же, как с указателями. Над ними можно выполнять операции инкремента и декремента. К ним можно применить оператор *. Типом итераторов объявляется тип iterator, который определен в различных контейнерах.

В библиотеке стандартных шаблонов также поддерживаются обратные итераторы (reverse iterators). Обратными итераторами могут быть либо двунаправленные итераторы, либо итераторы произвольного доступа, но проходящие последовательность в обратном направлении. То есть, если обратный итератор указывает на последний элемент последовательности, то инкремент этого итератора приведет к тому, что он будет указывать на элемент перед последним.

При упоминании различных типов итераторов в описаниях шаблонов, в данной книге будут использоваться следующие термины:

Термин Тип итератора

Randlter - - Произвольного доступа (random access) Л

Bitter Двунаправленный (bidirectional) .-г

Forlter -etc Однонаправленный (forward) -Т

Inter -м/ Ввода (input)

Outiter - - - - Вывода (output)

Вдобавок к контейнерам, алгоритмам и итераторам, в библиотеке стандартных шаблонов поддерживается еще несколько стандартных компонентов. Главными среди них являются распределители памяти, предикаты и функции сравнения.



1 ... 135 136 137 [ 138 ] 139 140 141 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика