| share_link | share_updated |
|---|---|
2026-01-11 17:14:33 +0300 |
Январь 2026 Февраль 2026 Март 2026
пн 5 12 19 26 2 9 16 23 2 9 16 23 30
вт 6[13]20]27] [3]10]17]24] [3]10]17]24]31
ср 7 14 21 28 4 11 18 25 4 11 18 25
чт 1 8 15 22 29 5 12 19 26 5 12 19 26
пт 2 9[16]23]30] [6]13]20]27] 6 13 20 27
сб 3 10 17 24 31 7 14 21 28 [7]14]21]28
вс 4 11 18 25 1 8 15 22 1 8 15 22 29
6 лекций 14 = +8 лекций 21 = +7 лекций
1 2 3 4 5 5 6 7 8 9 9 10 11 12 13 14
- Зарегистрироваться на gitlab.cpp-hse.net. Можно использовать почту на hse.ru / edu.hse.ru, или же ввести example@hse.ru и пингануть в чатике t.me/BigRedEye, чтоб окнуть руками.
- Найти своего ассистента(ов), списаться с ним.
- Завести чатик в Telegram для своей группы, на первом занятии скинуть ссылку студентам
- Коммуникация со студентами со стороны лектора живет в канале t.me/hse_cxx_2026 и чате https://t.me/+CycvNg7gX_A2ZGYy. Наверное, полезно вступить как минимум в канал. В чате обычно много флуда, это техническая поддержка.
- Посмотреть на проект (archiver) на https://gitlab.com/hse-cpp/hse-base-cpp/-/tree/main/tasks/archiver?ref_type=heads. В идеале написать и сдать, но как минимум продумать архитектуру. Тут, наверное, может помочь Богдан или Сергей?
- Проголосовать про удобное время еженедельной встречки: https://www.when2meet.com/?34282610-jiEWo
- name: 254-1 secret: ami-cpp-254-1
- name: 254-2 secret: ami-cpp-254-2
- name: 255-1 secret: ami-cpp-255-1
- name: 255-2 secret: ami-cpp-255-2
- name: 257-1 secret: ami-cpp-257-1
- name: 257-2 secret: ami-cpp-257-2
- name: 258-1 secret: ami-cpp-258-1
- name: 258-2 secret: ami-cpp-258-2
- name: 259-1 secret: ami-cpp-259-1
- name: 259-2 secret: ami-cpp-259-2
- name: 2510-1 secret: ami-cpp-2510-1
- name: 2510-2 secret: ami-cpp-2510-2
- name: 2511-1 secret: ami-cpp-2511-1
- name: 2511-2 secret: ami-cpp-2511-2
- name: 2512-1 secret: ami-cpp-2512-1
- name: 2512-2 secret: ami-cpp-2512-2
- name: 2513-1 secret: ami-cpp-2513-1
- name: 2513-2 secret: ami-cpp-2513-2
- name: 2514-1 secret: ami-cpp-2514-1
- name: 2514-2 secret: ami-cpp-2514-2
- name: 2515-1 secret: ami-cpp-2515-1
- Выдаем проект после 10 лекции (13.02). Дедлайн – 14.03, ещё неделя на защиты
- Обмениваться банком задач по семинарам
- Голосовалка про еженедельную встречу на 15 минут
- 0.275 ДЗ + 0.1 Семинары + 0.625 Проект
- Проект надо защитить.
- Домашки защищаются ассистентами.
- Общая информация о курсе
- Цели и философия курса
- Правила оценивания
- Репозитории и система сдачи заданий
- Базовое использование IDE
- Краткий обзор инструментов: компилятор (g++/clang), система сборки (CMake), IDE (VS Code/CLion), Git.
cppreference.comкак основной источник документации.- Общая структура проекта (исходники, тесты, система сборки).
- Настраиваем окружение:
- IDE: Clion бесплатный, VSCode
- Как запускать тесты (cmake)
- Как форматировать (clang-format)
- Как линтить (clang-tidy)
- Git (как сдавать?)
- Дебаггер (как чинить тесты?). gdb в консольке или визуальный в редакторе, как удобнее
- Definition of done: сдана первая задача (multiplication).
- Простейшая программа на C++
- Компиляция в командной строке
- Функция
main - Консольный ввод-вывод
- Объявление и инициализация переменных
- Базовые элементы синтаксиса
{}if,elseforwhile,do ... whilecontinue,breakswitch ... case
- Целочисленные типы (
int,long longи др.), знаковые/беззнаковые, гарантии на их размеры. - Операторы
- Арифметические; префиксный и постфиксные версии
++и `` %<<>>&&,||,&,|,^... ? ... : ...
- Арифметические; префиксный и постфиксные версии
- Неопределенное поведение (UB) и его источники (переполнение знаковых типов, неинициализированные переменные).
- Числа с плавающей запятой (
float,double), проблемы с точностью. - Ключевое слово
autoдля вывода типов.std::numeric_limits. - Есть
std::string, в ней храним строчки, подробнее потом.
- UB: примеры проблем с ним, нельзя допускать ни в коем случае
- Как жить с UB? ASan, UBSan
- Поговорить про float
- Задачи на битовые операции
- Объявление и определение функций, forward declaration.
- Ссылки. Передача аргументов по ссылке, по константной ссылке.
- Константность (
const) как контракт. - Перегрузка функций.
- Рекурсия
- Выходные параметры
- C-style массивы
- C-style строки
- Пробуем range based for
- Указатели. Пробуем передать массив в функцию, все ломается.
structvsclass. Поля и методы.- Конструкторы (включая
explicit), списки инициализации, деструкторы. - Методы,
this - Модификаторы доступа:
public,private,protected.
- Пишем класс, например,
Rational(инварианты,explicit) - Можно дать перегрузку операторов
std::vectorкак динамический массив:push_back,size,capacity, доступ по индексу.std::stringкак контейнер для текста, основные операции.- Введение в
std::string_viewкак невладеющий аналог строки для производительности.
- Зачем нужна std::string_view
- Как устроена std::string? Можно рассказать байку про SSO и 23 байта в libc++
- Концепция итератора как "обобщенного указателя".
begin(),end(). - Range-based for как синтаксический сахар над итераторами.
- Обзор ключевых алгоритмов:
std::sort,std::find,std::count_if,std::copy,std::accumulate.
- Решаем задачи на алгоритмы
- Пишем алгоритмы
- Контейнеры на основе деревьев:
std::map,std::set. - Контейнеры на основе хеш-таблиц:
std::unordered_map,std::unordered_set. - Контейнеры-адаптеры:
std::stack,std::queue,std::priority_queue.
- Рассказываем свои требования, рассказываем, как будем оценивать и проверять.
- Останется время – обсуждаем устройство хеш-таблиц.
- Мотивация: DRY (Don't Repeat Yourself).
- Шаблоны функций: синтаксис, инстанцирование.
- Шаблоны классов: синтаксис,
non-type template parameters.
- Примеры шаблонных классов
FixedVector<T, Capacity>.
- Виды памяти: статическая, автоматическая (стек), динамическая (куча).
- Операторы
new/deleteиnew[]/delete[]. Утечки памяти. - Сырые указатели, арифметика указателей, связь с массивами.
- Заново проговариваем мотивацию динамической памяти
- Пишем умные указатили?
- Идиома RAII (Resource Acquisition Is Initialization) как основа безопасности C++.
std::unique_ptr: семантика уникального владения.std::shared_ptr: семантика разделяемого владения, счетчик ссылок.std::weak_ptrдля разрыва циклических зависимостей.
- Пишем умный указатель (UniquePtr)
- Остается время – примеры сложных ресурсов c RAII (файлы?)
- RAII: Деструкторы не панацея, могут не вызываться при абнормальном завершении программы (даже std::terminate)
- Проблема shallow copy для классов с ресурсами.
- Детальный разбор конструктора копирования и оператора присваивания.
- Объединение всех трёх функций в "Правило трёх".
lvaluevsrvalue. Ссылки наrvalue(&&).- Семантика перемещения как "кража" ресурса у временного объекта.
std::moveкак безусловное приведение кrvalue-ссылке.- Конструктор перемещения и оператор присваивания перемещением. Правило пяти/шести.
- Добавляем перемещение умному указателю
- Примеры классов с перемещением
- Идея наследования.
public,protected,privateнаследование. - Проблема "срезки" (slicing).
- Виртуальные функции,
override, таблица виртуальных функций (vtable). - Абстрактные классы и чисто виртуальные функции. Виртуальный деструктор.
- Синтаксис
try,catch,throw. - Иерархия
std::exception. Пользовательские исключения. - Раскрутка стека (stack unwinding) и важность RAII.
noexceptи гарантии безопасности исключений (базовая, сильная,nothrow).
- Разделение на
.hи.cppфайлы. - Процесс сборки: компиляция, линковка.
- Модификаторы
externиstatic. - Пространства имен (
namespace) для избежания конфликтов имен.
- Обсуждаем сборку на примере наших проектов.