Современный язык программирования Си++

Отчетность: 
экзамен
Тип: 
обязательный
Часов: 
32
Семестр: 
III-6

Аннотация

В настоящее время язык программирования Cи++ активно развивается, международный комитет по стандартам обсуждает и регулярно принимает новые версии стандарта на этот язык, в которых добавляются новые существенные возможности, облегчающие и упрощающие решение широкого круга задач программирования. В данном курсе производится введение в Стандартную Библиотеку Шаблонов (STL) языка Си++ и новые возможности языка Си++, реализованные в большинстве современных компиляторов. Подробно разбирается функциональность стандартной библиотеки шаблонов, а также ее внутреннее устройство (итераторы, алгоритмы, контейнеры). Помимо обзора возможностей библиотеки STL производится разбор нововведений в сам язык программирования Cи++, подробно разбираются примеры их использования, иллюстрирующие их назначение. По каждой теме спецкурса студенты выполняют и сдают практические задания с измерением эффективности использования различных возможностей, имеющихся в стандартной библиотеке Cи++.

Программа

  1. Введение. Содержание курса, литература. Программирование исключительных состояний и шаблонов. Специализация шаблонов: полная и частичная. Архитектура библиотеки STL.
  2. Утилиты: шаблоны пар разнородных данных, шаблоны реляционных операторов.
  3. Понятие итератора. Аксиоматика итераторов, категории итераторов и их свойства. Способы реализации итераторов при наличии и отсутствии частичной специализации у компилятора. Реверсивные итераторы, итераторы потоков Cи++.
  4. Аллокаторы. Их назначение и реализация. Методы аллокаторов, их назначение и использование. Автоматические и «умные» указатели. Назначение, реализация.
  5. Понятие алгоритма в библиотеке STL. Определения минимума и максимума по условию, строгой квазиупорядоченности, упорядочености по оператору «меньше», кучи (heap). Понятие предиката и предикативной формы алгоритма. Оценка производительности алгоритмов (работа за константное, логарифмическое и линейное время).
  6. Алгоритмы STL: алгоритмы поиска, сортировки, подсчета, копирования, сравнения последовательностей, генерации, перебора, операции теории множеств и комбинаторики, алгоритмы работы с кучами (heap).
  7. Арифметические операции над элементами последовательностей, скалярные произведения, симметрическая разность, частичные разности, суммирование.
  8. Функторы в STL: объекты-функции (унарные и бинарные), операции с ними.
  9. Контейнеры STL: vector, deque, list, slist. Адаптеры контейнеров stack, queue, priority_queue. Методы контейнеров.
  10. Ассоциативные контейнеры STL: set, map, multiset, multimap, unordered_set, unordered_map.
  11. Обзор других возможностей стандартной библиотеки Cи++: valarray, slice_array, bit_vector, строки.
  12. Обзор современных расширений стандарта Cи++ 2011 года: автоматические типы, циклы с диапазоном, move-семантика, лямбда-функции.
  13. Обзор современных расширений стандарта Cи++ 2011 года: потоки исполнения (threads) и асинхронное программирование.
  14. Обзор современных расширений стандарта Cи++ 2011 года: комплексная арифметика, случайные числа, регулярные выражения, кортежи (tuples).

Литература

  1. Н. Джосаттис. Стандартная библиотека C++. Справочное руководство.
  2. Б.Страуструп. Язык программирования С++. Издание 3.
  3. П.Дж.Плаугер, А.Степанов,М.Ли,Д.Массер. STL стандартная библиотека шаблонов C++.
  4. 2014 ISO/IEC CD 14882. International standard C++ programming language.
  5. 2017 ISO/IEC Working Draft, Standard for Programming Language C++.