1. Что хотим от С++: 1.1 Структуры 1.2 Указатели (int* a = new int[10]) 1.3 STL (главным образом вектор) 2. Что мы не хотим, но оно есть 2.1 Uninitialized variables: просто добавь -Wall -Wextra -Wshadow 2.2 Проблемы с памятью. Valgrind и _GLIBCXX_DEBUG в помощь 3. Долгие и быстрые операции 3.0 Ввод-вывод, про библиотечку 3.1 Разная арифметика: +,-,<< быстро, * дольше, /,% долгие 3.2 Аллокация (которая может и log) 3.3 Даблы, а также сложные операции с ними: sqrt,sin,cos 3.4 Вызовы функции 3.5 Последовательный и случайный доступ к памяти, обход матрицы 3.6 очень быстро: strcpy, memcpy 4. Простые структуры данных 4.1 Массив, get(i), set(i, x) 4.2 Префиксные суммы, sum(l, r) 4.3 Двусвязный список 4.3.1 Общие идеи 4.3.2 struct node, struct list 4.3.3 push_back/pop_back/pop_front/push_front, фиктивные элементы 4.3.4 Обходим список (код) 4.3.5 insert, erase, мысли про то что указатель нужен 4.3.6 Решаем тест: удалить элемент добавленный на i-й операции 4.4 Односвязный список 4.4.1 реализация на массиве, обходим список и добавляем в начало 4.5 Вектор; анализируем время push_back 4.6 Интерфейсы: Stack, Queue, Deque 4.6.1 Stack через вектор 4.6.2 стэк и очередь через дек 4.6.3 дек через linked list 4.6.4 дек через массив (переаллокация в две стороны и циклическая реализация) 4.7 Стек с минимумом 4.8 Очередь с минимумом через два стека 5. (bonus topic!) Интегралы и суммы. Доказываем, что sum_i=1..n 1/i = ln(n) + O(1).