С++ 1MIT весна 2018 — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(Лекции)
(Лекции)
Строка 20: Строка 20:
  
 
STL в C++11. std::thread. [[Медиа:lect09.pdf]]
 
STL в C++11. std::thread. [[Медиа:lect09.pdf]]
 +
 +
== Экзамен ==
 +
 +
Предварительная версия билетов (будет уточнена ближе к экзамену)
 +
 +
NB. В каждом билете требуется привести примеры “разумных программ” и объяснить, зачем нужна каждая синтаксическая конструкция. Примеры с названиями Foo, Bar, Baz “разумными” не считаются, требуется что-то, что понравится преподавателю.
 +
 +
Билеты
 +
01. Шаблоны
 +
- решение в стиле C (#define)
 +
- шаблонные классы
 +
- шаблонные функции
 +
- специализация шаблонов (частичные и полные; в т.ч. для функций)
 +
- шаблонный параметр, не являющийся типом
 +
 +
02. Исключения
 +
- обработка ошибок в стиле C
 +
- try/catch/throw
 +
- исключения в конструкторах и деструкторах
 +
- идиома RAII: использование и примеры классов
 +
- гарантии исключений
 +
 +
03. Последовательные контейнеры
 +
- string, vector, list
 +
- внутреннее устройство и основные операции
 +
- итераторы и их инвалидация
 +
 +
04. Ассоциативные контейнеры
 +
- set, multiset, map, multimap
 +
- внутреннее устройство и основные операции
 +
- итераторы и их инвалидация
 +
 +
05. Алгоритмы
 +
- функторы
 +
- обзор алгоритмов с примерами (swap, iter_swap, sort, find, copy, unique, remove_if, lower_bound)
 +
- erase-remove idiom
 +
- реализация алгоритмов через итераторы
 +
 +
06. Реализация итераторов
 +
- advance, distance (зачем и реализация)
 +
- iterator_traits (value_type, iterator_category)
 +
- реализация собственного итератора
 +
 +
07. Приведение типов и наследование
 +
- C-style cast, static_cast, const_cast, reinterpret_cast - поведение и преимущества
 +
- RTTI и dynamic_cast
 +
 +
08. move семантика
 +
- rvalue и lvalue
 +
- rvalue references
 +
- move constructor, move assignment
 +
- move
 +
- universal reference, forward
 +
 +
09. Переменное число аргументов
 +
- переменное число параметров в стиле C (va_arg, va_list, va_start, va_end)
 +
- variadic templates (для функций)
 +
- function (использование)
 +
- bind (использование)
 +
 +
10. С++11. Разное.
 +
- auto, decltype
 +
- initializer_list
 +
- default, delete, override, final
 +
- lambda и захваты
 +
 +
11. C++11. STL.
 +
- unordered_set, unordered_map
 +
- shared_ptr, unique_ptr
 +
- for_each, begin(), end(), next()
 +
- array, forward_list
 +
 +
12. Метапрограммирование
 +
- решение в стиле C (#define, #ifdef)
 +
- SFINAE, реализация предиката для типа
 +
- type_traits, enable_if
 +
 +
13. Потоки и мутексы
 +
- зачем нужны потоки?
 +
- конкурентный доступ к переменным
 +
- thread
 +
- mutex, lock_guard
 +
- conditional_variable
 +
 +
14. C++14/C++17
 +
- улучшение в языке (по выбору студента)
 +
- std::filesystem
 +
- std::variant, std::any, std:optional
  
 
== Практика Гулецкий ==
 
== Практика Гулецкий ==

Версия 19:54, 25 мая 2018

Лекции

Преподаватель: Линский Евгений Михайлович (evgeny.linsky@gmail.com)

Шаблоны (базовый синтаксис). Медиа:lect01.pdf

Шаблоны (шаблонная переменная, специализация). Исключения (базовый синтаксис). Медиа:lect02.pdf

Исключения (RAII, гарантии). Приведение типов xxx_cast. RTTI. Медиа:lect03.pdf

Последовательные контейнеры. Итераторы. Медиа:lect04.pdf

Ассоциативные контейнеры. Алгоритмы. Медиа:lect05.pdf

С++11. move. Медиа:lect06.pdf

C++11. auto. lambda. Медиа:lect07.pdf

Метапрограммирование. Variadic templates, SFINAE, enable_if. Медиа:lect08.pdf

STL в C++11. std::thread. Медиа:lect09.pdf

Экзамен

Предварительная версия билетов (будет уточнена ближе к экзамену)

NB. В каждом билете требуется привести примеры “разумных программ” и объяснить, зачем нужна каждая синтаксическая конструкция. Примеры с названиями Foo, Bar, Baz “разумными” не считаются, требуется что-то, что понравится преподавателю.

Билеты 01. Шаблоны - решение в стиле C (#define) - шаблонные классы - шаблонные функции - специализация шаблонов (частичные и полные; в т.ч. для функций) - шаблонный параметр, не являющийся типом

02. Исключения - обработка ошибок в стиле C - try/catch/throw - исключения в конструкторах и деструкторах - идиома RAII: использование и примеры классов - гарантии исключений

03. Последовательные контейнеры - string, vector, list - внутреннее устройство и основные операции - итераторы и их инвалидация

04. Ассоциативные контейнеры - set, multiset, map, multimap - внутреннее устройство и основные операции - итераторы и их инвалидация

05. Алгоритмы - функторы - обзор алгоритмов с примерами (swap, iter_swap, sort, find, copy, unique, remove_if, lower_bound) - erase-remove idiom - реализация алгоритмов через итераторы

06. Реализация итераторов - advance, distance (зачем и реализация) - iterator_traits (value_type, iterator_category) - реализация собственного итератора

07. Приведение типов и наследование - C-style cast, static_cast, const_cast, reinterpret_cast - поведение и преимущества - RTTI и dynamic_cast

08. move семантика - rvalue и lvalue - rvalue references - move constructor, move assignment - move - universal reference, forward

09. Переменное число аргументов - переменное число параметров в стиле C (va_arg, va_list, va_start, va_end) - variadic templates (для функций) - function (использование) - bind (использование)

10. С++11. Разное. - auto, decltype - initializer_list - default, delete, override, final - lambda и захваты

11. C++11. STL. - unordered_set, unordered_map - shared_ptr, unique_ptr - for_each, begin(), end(), next() - array, forward_list

12. Метапрограммирование - решение в стиле C (#define, #ifdef) - SFINAE, реализация предиката для типа - type_traits, enable_if

13. Потоки и мутексы - зачем нужны потоки? - конкурентный доступ к переменным - thread - mutex, lock_guard - conditional_variable

14. C++14/C++17 - улучшение в языке (по выбору студента) - std::filesystem - std::variant, std::any, std:optional

Практика Гулецкий

Преподаватель: Артур Гулецкий (hatless.fox@gmail.com)

Практика Афанасьев

Преподаватель: Антон Афанасьев (anton.f.afanasev@yandex.ru)

Практика Лапшин

Преподаватель: Дмитрий Лапшин, по вопросам курса писать сюда: au-cpp@ldvsoft.net.