Вопросы к экзамену второго семестра — различия между версиями
Материал из SEWiki
Linsky (обсуждение | вклад) |
Linsky (обсуждение | вклад) |
||
Строка 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
Материалы по результатам консультации: