From fa900f3bd6516cb65998834c0c3150ae39ba067d Mon Sep 17 00:00:00 2001 From: cimbalistgleb-boop Date: Tue, 30 Jun 2026 18:25:32 +0300 Subject: [PATCH 1/2] Update 15_stl.md updated info about contains and erase_if --- src/15_stl.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/15_stl.md b/src/15_stl.md index 5c78659..6a6d61c 100644 --- a/src/15_stl.md +++ b/src/15_stl.md @@ -222,6 +222,10 @@ using reference = Reference; v.erase(it, v.end()); // чистим хвост, так как физический размер вектора остался тем же (подробнее на cppreference) ``` +В *C++20* ассоциативные контейнеры `(std::map, std::unordered_map, std::set, std::unordered_set)` получили метод `contains(key)`, который возвращает `bool`, проверяя наличие ключа. Это удобнее и читаемее, чем `count(key) > 0` или `find(key) != end()`. + +Начиная с *C++20*, для всех контейнеров появилась функция `std::erase_if`. Например, std::erase_if(v, pred); выполняет удаление за один вызов, что проще, чем комбинация `remove_if + erase`. + В *C++20* появился `operator<=>` (three-way comparison) сразу говорит, "меньше, равно или больше" и в возвращаемом значении говорит, какой *order* даёт (`partial`, `weak`, `strong`). Так же в *C++20* появились `range`, и какие-то алгоритмы в STL могут поменяться. From fc73e943cdad94aae702d8f0ffb656fe9551e0a0 Mon Sep 17 00:00:00 2001 From: cimbalistgleb-boop Date: Tue, 30 Jun 2026 18:43:55 +0300 Subject: [PATCH 2/2] Update 14_templates.md updated info about NTTP --- src/14_templates.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/14_templates.md b/src/14_templates.md index b6e799f..95c65e2 100644 --- a/src/14_templates.md +++ b/src/14_templates.md @@ -210,6 +210,13 @@ size_t size(T (&arr)[N]) { ``` Важный момент в non-type параметрах шаблона: **всё, что вы подставляете в шаблон, должно быть известно на этапе компиляции**. Потому что только на этапе компиляции существуют типы, в частности, шаблонные типы. +В *C++20* нестатический шаблонный параметр может быть объявлен как auto, позволяя выводить тип из аргумента. Например: +```cpp +template struct S { + static constexpr auto value = N; +}; +``` + ## Template template parameter. Хочется обёртку над контейнером. Зачем-то. ```c++