![]() |
|
Программирование >> Расширенная версия языка c++
Повторение пройденного Перед тем как необходимо правильно ответить на следующие вопросы и сделать упражнения. . 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) Вдобавок к контейнерам, алгоритмам и итераторам, в библиотеке стандартных шаблонов поддерживается еще несколько стандартных компонентов. Главными среди них являются распределители памяти, предикаты и функции сравнения.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |