Вопросы к экзамену второго семестра — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
 
Строка 96: Строка 96:
 
* enable_if [https://oopscenities.net/2012/06/02/c11-enable_if/]
 
* enable_if [https://oopscenities.net/2012/06/02/c11-enable_if/]
 
* variadic templates [http://eli.thegreenplace.net/2014/variadic-templates-in-c/]
 
* variadic templates [http://eli.thegreenplace.net/2014/variadic-templates-in-c/]
* rvalue/lvalue/move [http://thbecker.net/articles/rvalue_references/section_01.html]
+
* rvalue/lvalue/move [http://thbecker.net/articles/rvalue_references/section_01.html] [http://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c]
 
* threads [https://baptiste-wicht.com/posts/2012/03/cpp11-concurrency-part1-start-threads.html]
 
* threads [https://baptiste-wicht.com/posts/2012/03/cpp11-concurrency-part1-start-threads.html]
 
* mutex [https://baptiste-wicht.com/posts/2012/03/cp11-concurrency-tutorial-part-2-protect-shared-data.html]
 
* mutex [https://baptiste-wicht.com/posts/2012/03/cp11-concurrency-tutorial-part-2-protect-shared-data.html]

Текущая версия на 16:54, 9 июня 2017

Регламент:

  • 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

Материалы по результатам консультации:

  • общие вопросы C++11 [1]
  • манипуляторы [2]
  • SFINAE [3]
  • enable_if [4]
  • variadic templates [5]
  • rvalue/lvalue/move [6] [7]
  • threads [8]
  • mutex [9]