-
Фундаментальные типы данных
-
Примитивные объекты — контейнеры
-
Стандартная библиотека шаблонов STL
-
Расширенная библиотека — Boost
-
Развитие языка — новые стандарты
-
Актуальная информация — https://cppreference.com
-
Последовательные (vector, array, list, string)
-
Непоследовательные (list, forward_list, dequeue)
-
Ассоциативные (map, set)
-
Хеш-контейнеры (unordered_set, unordered_map)
-
Адаптеры (stack, priority_queue, queue)
-
Span (view) — C++20
-
std::initializer_list
— список инициализации{1, 2, 3}
-
begin/end — возвращают итераторы
-
cbegin/cend — константные итераторы (подходят только для чтения)
-
rbegin/rend — reverse_iterator (обход совершается с конца)
-
erase — удаляет элементы (освобождает место) по итератору
-
автоматические расширение контейнера при вставке
-
operator[]
— индексация -
std::find — для поиска элементов
-
size — размер контейнера
-
data — получить "сырой" указатель на данные (подходит не для всех)
-
front/back ==
*begin()/*rbegin()
-
push/pop/emplace/insert — вставка элементов
-
resize — изменение размера
-
Созданы для абстракции контейнера от алгоритма
-
6 видов (тегов) по типам контейнеров:
-
Contigues — непрерывный (указатели)
-
RandomAccess — с произвольным доступом (vector)
-
Bidirectional — есть инкремент и декремент (list)
-
ForwardIterator — есть инкремент (forward_list)
-
Input — чтение, можно пройтись итератором только один раз (istream)
-
Output — запись, можно пройтись итератором только один раз (ostream)
-
-
Могут быть полностью абстрагированы от контейнера
-
Потоки ввода/вывода обладают своими итераторами
-
Адаптеры (reverse, back_inserter)
-
std::iterator_traits — класс для получения информации об итераторе (category_tag, value_type, reference, pointer, difference_type)
-
typename std::iterator_traits<Iterator>::value_type
— тип значения при разыменовании
-
-
Вся арифметика построена на перегрузке операторов
-
operator()` и `operator(int)
— префиксная и постфиксаня формы инкремента (декремента) -
operator*
— разыменование итератора (получение значения) -
operator+(difference_type)
— инкремент (декремент) на произвольное число -
operator[]
— индексация в RandomAccess итераторах -
operator==
иoperator!=
— для сравнения итераторов и остановки цикла -
operator=
— для поддержки Output итератора -
operator-
— для получения расстояния между итераторами -
Операции — advance, distance, next, prev
-
Почти все алгоритмы работают с итераторами
-
Не модифицирующие последовательные операции (count, find)
-
Модификаторы (fill, copy, transform)
-
Сортировки (sort, nth_element, partition)
-
Поиск (binary_search, lower_bound)
-
Операции с множествами (merge, includes, set_union)
-
-
Минимумы/максимумы (min, minmax, min_element, clamp)
-
Аккумуляторы (iota, accumulate, transform_reduce, partial_sum, inner_product)
-
Политики запуска алгоритмов (seq, par, par_unseq)
-
Общие математические функции — cmath, cstdlib
-
Специальные математические функции (cyl_bessel_i, expint, riemann_zeta)
-
Complex, valarray
-
Аккумуляторы, gcd, lcm
-
Псевдослучаные последовательности
-
Псевдогенераторы (mersenne_twister_engine, linear_congruential_engine)
-
Адаптеры генераторов (shuffle_order_engine, discard_block_engine)
-
Недетерменированный генератор (random_device)
-
Функции распределения (uniform_int_distribution, normal_distribution)
-
-
Рациональные числа уровня компиляции (нужно для
std::chrono
) -
Управление FPE для работы с плавающей точкой
-
Итераторы (strembuf_iterator, stream_iterator) — InputIterator, OutputIterator
-
Потоковые объекты — stringstream
-
I/O манипуляторы
-
boost::format
— самое лучшее отprintf
-
boost::iostreams
— расширенныйstd::iostream
-
Копирование файла:
std::ostream("blabla.txt") << std::ifstream("lala.txt").rdbuf();
-
Простейший манипулятор
std::ostream& endline(std::ostream& s) { return s << "\n" << std::flush; } std::cout << "Message" << endline;
-
Как работает
std::hex
? Манипуляции сiword
иpword
потока -
Перегрузка возможна только объекта
streambuf
, так как только он имеет виртуальные методы -
Вывод вектора и написание своего оператора вывода
template<class A, class B> std::ostream& operator<<(std::ostream& stream, const std::vector<A, B>& v) { std::copy(v.begin(), v.end(), std::experimental::make_ostream_joiner(stream, ", ")); } std::vector a{{7.8, 8.0, 59.9, -9.1, 1.598, 90.35}}; std::cout << a << std::endl;
-
Обёртка на
new
,delete
-
Слабые указатели (weak_ptr)
-
Совместно используемые указатели (shared_ptr)
-
Уникальные указатели (unique_ptr)
-
Потокобезопасность — перегрузка оператора
→
-
Утилиты:
-
enable_shared_from_this
-
Умные указатели поддерживают пользовательские деструкторы
-
Аллокаторы
-
-
Различие
delete
иdelete[]
→ умные указатели и массивы
-
Библиотека
std::chrono
-
3 класса для работы со временем:
-
clocks
— замер времени-
system_clock
— системное время -
steady_clock
— монотонное время, никогда не возвращается назад -
high_resolution_clock
— самое точное время -
utc_clock
,file_clock
, …
-
-
time_point
— временная метка -
duration
— разница между временными метками
-
-
Кастование между различными величинами
duration
-
Календарь и временная зона — C++20
-
Строковые константы —
42s
,1min
,2us
(C++14)
-
Библиотека
std::regex
-
Основные функции:
-
Построение регулярки — конструктор
-
regex_match
— соответствие предложения регулярному выражению -
std::smatch
,std::cmatch
— объекты совпадения -
regex_search
— поиск регулярного выражения -
regex_replace
— поиск и замена
-
-
Строковые литералы (
R"match\t\n"
<=>"match\\t\\n"
) -
Опции и типы регулярок — icase, multiline, ECMAScript, grep, …
-
Сделать тип
T
атомарным —std::atomic<T>
-
Поддержка атомарных операций (fetch_add, exchange)
-
Барьеры памяти
-
Специальный тип
atomic_flag
—test_and_set
-
Для неатомарных объектов существует гарантия порядка операций
std::memory_order
-
POSIX интерфейс
-
Мьютексы:
-
mutex, timed_mutex, recursive_mutex, shared_mutex
-
Локеры — lock_guard, scoped_lock, unique_lock, shared_lock
-
-
Условные переменные
-
Необходимо иметь синхронизирующий мьютекс
-
-
Асинхронные операции:
-
promise
— в него устанавливают результат асинхронно -
future
— объект, который выполнится в неизвестное время -
async
— обёртка надfuture
-
-
Объект потока
std::thread
-
yield
,sleep_for
-
join
,detach
-
-
Отдельное подпространство имён
std::filesystem
-
Класс
path
— абстракция пути в файловой системе -
Методы
path
позволяют модифицировать путь -
Создание директорий, символических ссылок
-
Рекурсивный обход директории —
recursive_directory_iterator
-
Получение информации о файле —
file_status
-
Получение доступного места на файловой системе —
space_info
-
Функции для работы с файлами:
-
exists, file_size, absolute, space
-
copy_file, remove
-
rename, resize_file
-
current_path
-
temp_director_path
-