Вопросы к экзамену второго семестра

Материал из SEWiki
Перейти к: навигация, поиск

Регламент:

  • 1 теоретический вопрос в билете, чтобы подтвердить оценку семестра
  • 1 практическая задача на бумаге, чтобы поднять оценку на балл

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

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