- •6Vpj7-h3cxh-hbtpt-x4t74-3yvy7
- •Оглавление
- •Предисловие
- •Введение
- •1.1. Понятие класса и объекта. Инкапсуляция
- •1.2. Определение классов. Компоненты. Доступность
- •Class_key /*class_id*/ { /*members_list*/ };
- •Value_type class_id::function_id(parameters) {statements}
- •CPoint point1(100,70); // локальный объект
- •Static cPoint point3(50,120); // статический объект
- •Class_id(parameters) /*:initializer_list*/ {/*statements*/}
- •CString(const char *);
- •Delete[] __thematrix;
- •1.4. Обращение к компонентам объектов
- •1.5. Статические и нестатические компоненты классов
- •1.7. Указатель this
- •В опросы для самопроверки
- •2. Механизм наследования. Полиморфизм
- •2.1. Формы наследования. Базовые и производные классы
- •Class_key class_id: inheritance_specifier base_class_id {member_list};
- •2.3. Абстрактные классы
- •2.4. Множественное наследование и виртуальные классы
- •2.5. Преобразование динамических типов. Динамическая идентификация типов
- •Catch ( std::bad_cast & ) { // обработка исключения
- •Return 0;
- •Вопросы для самопроверки
- •3. Дружественные функции и классы
- •3.1. Дружественные функции
- •3.2. Дружественные классы
- •Вопросы для самопроверки
- •4. Механизм вложения
- •4.1. Вложенные классы
- •4.2. Локальные классы
- •Вопросы для самопроверки
- •5. Объектная модель и шаблоны
- •5.1. Определение, описание и инстанцирование шаблонов
- •::Function_id(function_parameter_list) { statements }
- •5.2. Параметры и аргументы шаблонов
- •Class identifier typename identifier
- •// Key, Data – параметры-типы (типы ключа и данных отображения)
- •// Container – контейнер, где содержится информация отображения class сMap {
- •Class MyTemplate
- •Int array[10]; struct Structure { int m; static int sm; } str;
- •5.3. Шаблоны компонентных функций
- •Value_type function_template_id(function_parameter_list) { statements }
- •::Function_template_id(function_parameter_list) { statements }
- •5.4. Специализация шаблонов
- •Вопросы для самопроверки
- •6. Перегрузка операций
- •Value_type operator @ (parameter_list);
- •Value_type operator @ (parameter_list) { statements }
- •Return fail();
- •6.3. Перегрузка бинарных операций
- •Value_type operator @ (parameter); // компонентная функция
- •Value_type operator @ (parameter, parameter); // глобальная функция friend value_type operator @ (parameter, parameter); // дружественная функция
- •Return *this;
- •Return *this;
- •/* Присваиваем собственные данные класса d */
- •6.4. Перегрузка операций управления памятью
- •Typedef void (*new_handler) ();
- •Extern new_handler set_new_handler( new_handler new_p );
- •Void operator delete(void * memory) {
- •... // Специальная обработка пользователя ::operator delete(memory); // освободить память
- •Вопросы для самопроверки
- •7. Механизм исключений
- •Throw expression
- •7.3. Специальные средства поддержки механизма исключений
- •Unexpected_function set_unexpected(unexpected_function func_name);
- •Typedef void (* unexpected_function) ();
- •Extern char * __throwExceptionName; extern char * __throwFileName; extern unsigned __throwLineNumber;
- •Вопросы для самопроверки
- •8. Подсчет ссылок
- •8.1. Назначение механизма подсчета ссылок
- •8.2. Контекстно-независимая модель счетчика ссылок
- •8.4. Внедрение подсчета ссылок в существующий класс
- •Вопросы для самопроверки
- •9. Стандартная библиотека шаблонов (stl)
- •9.1. Назначение и архитектура stl
- •9.2. Последовательные контейнеры
- •Class vector {
- •// Определение итераторов
- •Sort(first,last); // сортировка вектора в диапазоне итераторов
- •Ifstream ifile ("example.In"); ofstream ofile ("example.Out");
- •OutputIterator copy(
- •InputIterator first, InputIterator last, OutputIterator result );
- •// Заполнение списка
- •Operator- (int)
- •Operator- (random access iterator) operator[] (int)
- •InputIterator find(InputIterator first, InputIterator last, const t & value);
- •InputIterator find(InputIterator first, InputIterator last, const t & value)
- •Return first;
- •OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
- •Return result;
- •OutputIterator transform (InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op)
- •Return result;
- •Void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
- •__Quick_sort_loop(first, last, comp); __final_insertion_sort(first, last, comp);
- •T accumulate(InputIterator first, InputIterator last, t init, Function f);
- •V.Push_back(2); V.Push_back(5);
- •9.5. Функторы
- •T operator()(const t & X) const { return -X; }
- •9.7. Адаптеры
- •S1.Push(1); s1.Push(5);
- •// Записать в вектор числа 1 2 3 4
- •// Сортировать по неубыванию
- •// Записать в вектор числа 4 6 10 3 13 2
- •Вопросы для самопроверки
- •Заключение
- •Библиографический Список
- •6Vpj7-h3cxh-hbtpt-x4t74-3yvy7
Вопросы для самопроверки
Охарактеризуйте назначение и организацию STL.
Какие компоненты входят в состав STL?
Определите понятия контейнера, алгоритма и итератора.
Охарактеризуйте виды контейнеров.
Перечислите шаблоны последовательных контейнеров в STL.
Чем отличаются друг от друга векторы, списки и двухсторонние очереди?
Каково назначение компонентных функций контейнеров begin и end?
Покажите на примере формирование объектов-векторов, объектов-списков и объектов-очередей.
Каким образом можно вставить элемент в вектор, список и очередь? Приведите фрагмент кода.
Покажите, как можно вставить в вектор группу смежных элементов из массива.
Приведите фрагмент кода, который осуществляет вывод элементов списка в поток cout.
Напишите фрагмент программы для соединения двух списков в один.
Какие категории итераторов имеются в STL? Перечислите их в порядке возрастания функциональных возможностей.
Какие операции свойственны входным итераторам и выходным итераторам?
Покажите на примере использование итераторов istream_iterator и ostream_iterator.
Какие новые возможности (операции) отличают однонаправленные и двунаправленные итераторы?
Назовите ограничения при работе с входными и выходными итераторами.
Почему для работы со списками достаточно двунаправленных итераторов, а для работы с векторами требуются итераторы произвольного доступа?
Какой категории итераторов достаточно для алгоритма линейного поиска? Почему бинарный поиск требует от итератора большей функциональности?
Дайте классификацию алгоритмов STL.
Назовите основные немодифицирующие алгоритмы.
Приведите пример линейного поиска значения в списке алгоритмом find_linear.
Каково назначение алгоритма adjacent_find?
Покажите на примере использование алгоритма find_if для поиска элемента в двухсторонней очереди.
Запишите фрагмент кода для вывода элементов списка в поток cout алгоритмом copy.
Какие алгоритмы сортировки применяются в STL?
Охарактеризуйте назначение алгоритмов transform, for_each и accumulate.
Приведите примеры применения алгоритмов из вопроса 27.
Запишите код для проверки четности суммы элементов вектора.
Какие стандартные функторы имеются в STL?
В чем состоит отличие ассоциативных контейнеров от последовательных?
Какие шаблоны ассоциативных контейнеров имеются в STL? Охарактеризуйте каждый из них.
Назовите основные операции, свойственные ассоциативным контейнерам.
Покажите на примере, как создать набор set из строк класса string.
Приведите пример создания отображения map и поиска в нем объекта.
Что понимается под адаптерами?
Какие виды адаптеров введены в STL?
Покажите на примере использование адаптера stack.
Что понимается под реверсивным итератором?
Каково назначение итераторов вставки? Приведите пример их использования.
Какую задачу решают байндеры bind1st и bind2nd?
Используя байндеры, подсчитайте в векторе количество элементов, лежащих в заданном диапазоне.
Охарактеризуйте назначение аллокаторов.
Задачи
Решите задачу 1 из раздела 5, используя в качестве «внутреннего» контейнера множества какой-либо из стандартных контейнеров STL.
Переработайте шаблон задачи 2 из раздела 5 в соответствии с принципами организации контейнеров STL. Покажите совместную работу этого шаблона со стандартными алгоритмами, например find и replace.