Computer Science Center — это совместная инициатива Computer Science клуба при ПОМИ РАН, компании JetBrains и Школы анализа данных Яндекса.
Центр существует, чтобы дать возможность талантливым студентам и выпускникам развиваться в интересных им направлениях: Computer Science, Data Science или Software Engineering.
Курс по C ++ в двух частях в центре читает Валерий Михайлович Лесин, valery-l, преподаватель CS центра и совместной магистратуры ИТМО и JetBrains «Разработка программного обеспечения / Software Engineering», технический директор Simlabs.
Вторая часть поможет освоить большую часть возможностей современного С++. Скорее всего, вы не станете гуру в конце второго семестра, но навыка должно хватить для эффективного использования C++ в большинстве проектов, если плюсы там применимы.
Раскусим новые возможности языка и стандартной библиотеки: move семантику, bind/function, enable_if/if constexpr, сoroutines и другие. Посмотрим на некоторые характерные задачи: многопоточное программирование, использование библиотек в Windows и Linux и другие.
Приятного просмотра!
1. Стандартная библиотека. Состав, контейнеры STL, типы контейнеров, контейнер vector, итераторы, как устроен вектор. Контейнер sdt::list, адаптеры, ассоциативные контейнеры, итерирование map, поиск и вставка в map. Индексирование, удаление из map (set). Другие ассоциативные контейнеры.
2. Move semantics && perfect forwarding. Быстрые программы. Return Value Optimization. Lvalue vs Rvalue. Как отличить временный объект от не временного. Преобразование &<-> const &<->&&. Move constructor vs other constructors. Возврат из функции значения vs &&. Возврат больших объектов по значению, передача по значению. Forwarding argument problem. Новые правила для ссылок в C++ 11. Perfect forwarding.
3. Алгоритмы и функторы. Стандартные алгоритмы, описание алгоритмов. Немодифицирующие и модифицирующие операции. Сортировка и поиск. Контейнеры vs итераторы. Стандартные функторы. Boost. range. Range concept.
4. bind & function. Задача: вызов callback’a. Немного магии — std::bind. Как избежать копирования. ref/cref. Использование bind с функторами. Вызов методов. Вложенность bind. std::function. Синергический эффект bind & function. Быстродействие. Как работают placeholder’ы.
5. Исключения. Способы обработки ошибок. try...catch. Типы исключений. Использование RAII. Передача параметров. Класс stack. Гарантии безопасности исключений. Гарантия отсутствия исключений. Копирование стека. Уменьшение требований stack. Спецификация исключений. noexcept operator и noexcept спецификация (C++ 11). STL контейнеры. Гарантии и требования stack.
6. To SFINAE or not to SFINAE. Выбор кода в зависимости от типа. Выбор типа по условию. Проверка приводимости. Проверка на базовый класс. SFINAE. Проверка на контейнер. Выбор по свойству типа.
7. Нововведения С++. Anonymous functions, auto, decltype, variadic templates, parameter pack, pack expansion & fold expression. Non-static data member initializers, if constexpr.
8. Строки. Ввод/вывод. Кодировка (набор символов). Строка std ::basic_string. Базовые операции над строками. boost string algorithms. Text vs Binary files format. Потоки ввода/вывода, вывод, ввод, состояния потока, форматированный ввод/вывод. Манипуляторы, файловые потоки.
9. Препроцессор. Использование и применимость макросов. Определение констант, условная компиляция. Include guard. Макро функции. Превращение токена в строку, конкатенация токенов. Multiline macro, predefined defines. assert. Вариативный макрос, перегрузка макросов. Pimpl идиома.
10. Libraries. Статическая и динамическая библиотеки. Static vs Dynamic. Загрузка библиотек без предварительной линковки. Экспортируемые функции. Технология COM.
11. Многопоточность. Процесс и потоки. Типы многозадачности. Проблемные ситуации. Создание потока. Объект потока std::thread. Вспомогательные функции. Mutual exclusion. Lock management. Exception catching. Exception rethrow. Condition variables.
12. Многопоточность. Часть 2. Отложенные вычисления. Future and Promise. Async and Future. Очередь событий/сообщений. Контракты, концепции.
Автор: Катя Широкова