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

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

Данный курс доступен на сайте "Университет без границ".

Аннотация

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

Программа

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

Литература

  1. Н. Джосаттис. Стандартная библиотека C++. Справочное руководство.
  2. Б.Страуструп. Язык программирования С++. Издание 3.
  3. Я.Галовиц. C++17 STL.
  4. Р.Гримм. C++20 в деталях.
  5. Д.Вандервуд, Н.Джосаттис, Д.Грегор. Шаблоны C++. Справочник разработчика.
  6. 2014 ISO/IEC Working Draft, Standard for Programming Language C++.
  7. 2017 ISO/IEC Working Draft, Standard for Programming Language C++.
  8. 2020 ISO/IEC Working Draft, Standard for Programming Language C++.