С++ 1MIT весна 2018 — различия между версиями
Linsky (обсуждение | вклад) (→Экзамен) |
Linsky (обсуждение | вклад) (→Экзамен) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 23: | Строка 23: | ||
== Экзамен == | == Экзамен == | ||
− | + | В каждом билете требуется привести примеры “разумных программ” и объяснить, зачем нужна каждая синтаксическая конструкция. Примеры с названиями Foo, Bar, Baz “разумными” не считаются. | |
Билеты | Билеты | ||
Строка 32: | Строка 32: | ||
#* специализация шаблонов (частичные и полные; в т.ч. для функций) | #* специализация шаблонов (частичные и полные; в т.ч. для функций) | ||
#* шаблонный параметр, не являющийся типом | #* шаблонный параметр, не являющийся типом | ||
− | |||
# Исключения | # Исключения | ||
#* обработка ошибок в стиле C | #* обработка ошибок в стиле C | ||
Строка 39: | Строка 38: | ||
#* идиома RAII: использование и примеры классов | #* идиома RAII: использование и примеры классов | ||
#* гарантии исключений | #* гарантии исключений | ||
− | |||
# Последовательные контейнеры | # Последовательные контейнеры | ||
#* string, vector, list | #* string, vector, list | ||
#* внутреннее устройство и основные операции | #* внутреннее устройство и основные операции | ||
#* итераторы и их инвалидация | #* итераторы и их инвалидация | ||
− | |||
# Ассоциативные контейнеры | # Ассоциативные контейнеры | ||
#* set, multiset, map, multimap | #* set, multiset, map, multimap | ||
#* внутреннее устройство и основные операции | #* внутреннее устройство и основные операции | ||
#* итераторы и их инвалидация | #* итераторы и их инвалидация | ||
− | |||
# Алгоритмы | # Алгоритмы | ||
#* функторы | #* функторы | ||
Строка 55: | Строка 51: | ||
#* erase-remove idiom | #* erase-remove idiom | ||
#* реализация алгоритмов через итераторы | #* реализация алгоритмов через итераторы | ||
− | |||
# Реализация итераторов | # Реализация итераторов | ||
#* advance, distance (зачем и реализация) | #* advance, distance (зачем и реализация) | ||
#* iterator_traits (value_type, iterator_category) | #* iterator_traits (value_type, iterator_category) | ||
#* реализация собственного итератора | #* реализация собственного итератора | ||
− | |||
# Приведение типов и наследование | # Приведение типов и наследование | ||
#* C-style cast, static_cast, const_cast, reinterpret_cast - поведение и преимущества | #* C-style cast, static_cast, const_cast, reinterpret_cast - поведение и преимущества | ||
#* RTTI и dynamic_cast | #* RTTI и dynamic_cast | ||
− | + | #* пользовательские приведение типов | |
# move семантика | # move семантика | ||
#* rvalue и lvalue | #* rvalue и lvalue | ||
Строка 70: | Строка 64: | ||
#* move constructor, move assignment | #* move constructor, move assignment | ||
#* move | #* move | ||
− | |||
− | |||
# Переменное число аргументов | # Переменное число аргументов | ||
#* переменное число параметров в стиле C (va_arg, va_list, va_start, va_end) | #* переменное число параметров в стиле C (va_arg, va_list, va_start, va_end) | ||
Строка 77: | Строка 69: | ||
#* function (использование) | #* function (использование) | ||
#* bind (использование) | #* bind (использование) | ||
− | |||
# С++11. Разное. | # С++11. Разное. | ||
#* auto, decltype | #* auto, decltype | ||
Строка 83: | Строка 74: | ||
#* default, delete, override, final | #* default, delete, override, final | ||
#* lambda и захваты | #* lambda и захваты | ||
− | |||
# C++11. STL. | # C++11. STL. | ||
#* unordered_set, unordered_map | #* unordered_set, unordered_map | ||
#* shared_ptr, unique_ptr | #* shared_ptr, unique_ptr | ||
− | #* | + | #* for(a: collection), begin(), end(), next() |
#* array, forward_list | #* array, forward_list | ||
− | |||
# Метапрограммирование | # Метапрограммирование | ||
#* решение в стиле C (#define, #ifdef) | #* решение в стиле C (#define, #ifdef) | ||
#* SFINAE, реализация предиката для типа | #* SFINAE, реализация предиката для типа | ||
#* type_traits, enable_if | #* type_traits, enable_if | ||
− | |||
# Потоки и мутексы | # Потоки и мутексы | ||
#* зачем нужны потоки? | #* зачем нужны потоки? | ||
Строка 100: | Строка 88: | ||
#* thread | #* thread | ||
#* mutex, lock_guard | #* mutex, lock_guard | ||
− | |||
− | |||
# C++14/C++17 | # C++14/C++17 | ||
#* улучшение в языке (по выбору студента) | #* улучшение в языке (по выбору студента) | ||
#* std::filesystem | #* std::filesystem | ||
− | #* std::variant, std::any, std:optional | + | #* std::variant, std::any, std:optional (использование) |
== Практика Гулецкий == | == Практика Гулецкий == |
Текущая версия на 13:10, 7 июня 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
Экзамен
В каждом билете требуется привести примеры “разумных программ” и объяснить, зачем нужна каждая синтаксическая конструкция. Примеры с названиями Foo, Bar, Baz “разумными” не считаются.
Билеты
- Шаблоны
- решение в стиле C (#define)
- шаблонные классы
- шаблонные функции
- специализация шаблонов (частичные и полные; в т.ч. для функций)
- шаблонный параметр, не являющийся типом
- Исключения
- обработка ошибок в стиле C
- try/catch/throw
- исключения в конструкторах и деструкторах
- идиома RAII: использование и примеры классов
- гарантии исключений
- Последовательные контейнеры
- string, vector, list
- внутреннее устройство и основные операции
- итераторы и их инвалидация
- Ассоциативные контейнеры
- set, multiset, map, multimap
- внутреннее устройство и основные операции
- итераторы и их инвалидация
- Алгоритмы
- функторы
- обзор алгоритмов с примерами (swap, iter_swap, sort, find, copy, unique, remove_if, lower_bound)
- erase-remove idiom
- реализация алгоритмов через итераторы
- Реализация итераторов
- advance, distance (зачем и реализация)
- iterator_traits (value_type, iterator_category)
- реализация собственного итератора
- Приведение типов и наследование
- C-style cast, static_cast, const_cast, reinterpret_cast - поведение и преимущества
- RTTI и dynamic_cast
- пользовательские приведение типов
- move семантика
- rvalue и lvalue
- rvalue references
- move constructor, move assignment
- move
- Переменное число аргументов
- переменное число параметров в стиле C (va_arg, va_list, va_start, va_end)
- variadic templates (для функций)
- function (использование)
- bind (использование)
- С++11. Разное.
- auto, decltype
- initializer_list
- default, delete, override, final
- lambda и захваты
- C++11. STL.
- unordered_set, unordered_map
- shared_ptr, unique_ptr
- for(a: collection), begin(), end(), next()
- array, forward_list
- Метапрограммирование
- решение в стиле C (#define, #ifdef)
- SFINAE, реализация предиката для типа
- type_traits, enable_if
- Потоки и мутексы
- зачем нужны потоки?
- конкурентный доступ к переменным
- thread
- mutex, lock_guard
- 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.