⚙️ std::ssize
std::ssize возвращает размер контейнера в виде знакового числа. Это удобно при итерации, когда необходимо безопасно использовать индексы типа int вместо size_t, особенно в циклах с отрицательными смещениями или при сравнении с -1.
👩💻
@quizcpp
std::ssize возвращает размер контейнера в виде знакового числа. Это удобно при итерации, когда необходимо безопасно использовать индексы типа int вместо size_t, особенно в циклах с отрицательными смещениями или при сравнении с -1.
👩💻
@quizcpp
👍1
🚫 Антипаттерн недели: Пропуск ключевого слова virtual при наследовании с полиморфизмом в C++
В C++ если в базовом классе не указано ключевое слово virtual, это приводит к тому, что ожидаемый полиморфизм не работает. Методы производного класса не будут вызываться через указатель на базовый класс, если метод не объявлен как virtual.
✔️ Добавляйте virtual в базовые классы и override в производные.
👩💻
@quizcpp
В C++ если в базовом классе не указано ключевое слово virtual, это приводит к тому, что ожидаемый полиморфизм не работает. Методы производного класса не будут вызываться через указатель на базовый класс, если метод не объявлен как virtual.
✔️ Добавляйте virtual в базовые классы и override в производные.
👩💻
@quizcpp
👍2
⚙️ std::clamp
std::clamp сжимает значение в определённые рамки. Это полезно для проверки чисел, нормализации данных и предотвращения выхода за пределы.
👩💻
@quizcpp
std::clamp сжимает значение в определённые рамки. Это полезно для проверки чисел, нормализации данных и предотвращения выхода за пределы.
👩💻
@quizcpp
👍1
⚙️ std::lcm
std::lcm находит наименьшее общее кратное (НОК) двух чисел. Это может быть полезно в задачах, связанных с синхронизацией событий, обработкой дробей и математическими вычислениями.
👩💻
@quizcpp
std::lcm находит наименьшее общее кратное (НОК) двух чисел. Это может быть полезно в задачах, связанных с синхронизацией событий, обработкой дробей и математическими вычислениями.
👩💻
@quizcpp
⚙️ std::size
std::size возвращает количество элементов в контейнере или массиве. Это удобно для безопасного определения размера без необходимости явно указывать тип.
👩💻
@quizcpp
std::size возвращает количество элементов в контейнере или массиве. Это удобно для безопасного определения размера без необходимости явно указывать тип.
👩💻
@quizcpp
⚙️ std::byte
std::byte — это тип данных, предназначенный для работы с сырыми байтами. Он полезен для безопасного управления памятью и бинарными данными.
👩💻
@quizcpp
std::byte — это тип данных, предназначенный для работы с сырыми байтами. Он полезен для безопасного управления памятью и бинарными данными.
👩💻
@quizcpp
⚙️ std::iota
std::iota — это алгоритм из библиотеки, который заполняет диапазон значениями, начиная с указанного стартового числа и увеличивая его на 1 для каждого следующего элемента.
Он полезен для генерации простых последовательностей чисел, индексов, номеров строк и тестовых данных без использования ручных циклов.
👩💻
@quizcpp
std::iota — это алгоритм из библиотеки, который заполняет диапазон значениями, начиная с указанного стартового числа и увеличивая его на 1 для каждого следующего элемента.
Он полезен для генерации простых последовательностей чисел, индексов, номеров строк и тестовых данных без использования ручных циклов.
👩💻
@quizcpp
⚙️ std::fill
std::fill заполняет указанный диапазон определённым значением, копируя его во все элементы. Это удобно для инициализации контейнеров или обнуления данных.
👩💻
@quizcpp
std::fill заполняет указанный диапазон определённым значением, копируя его во все элементы. Это удобно для инициализации контейнеров или обнуления данных.
👩💻
@quizcpp
👍2
Yomm2 — это библиотека на C++17, которая обеспечивает быстрые и открытые мультиметоды. Она позволяет эффективно вызывать методы с несколькими аргументами различных типов и добавлять новые методы к уже существующим классам без необходимости изменять их исходный код.
👩💻
@quizcpp
👩💻
@quizcpp
std::min возвращает наименьшее из двух значений. Это удобно для выбора меньшего элемента при сравнении чисел или установлении предела значения.
👩💻
@quizcpp
👩💻
@quizcpp
🚫 Антипаттерн недели: Неинициализированные поля в конструкторах
В C++ часто допускается ошибка, когда поля класса не инициализируются в конструкторе. Это может привести к неопределённому поведению, особенно для встроенных типов, таких как int и bool.
✔️ Всегда инициализируйте поля либо в списке инициализации конструктора, либо задавайте значения по умолчанию прямо при объявлении.
👩💻
@quizcpp
В C++ часто допускается ошибка, когда поля класса не инициализируются в конструкторе. Это может привести к неопределённому поведению, особенно для встроенных типов, таких как int и bool.
✔️ Всегда инициализируйте поля либо в списке инициализации конструктора, либо задавайте значения по умолчанию прямо при объявлении.
👩💻
@quizcpp
⚙️ std::ranges::chunk_by
std::ranges::chunk_by (C++23) объединяет последовательные элементы диапазона на основе заданного критерия. Это удобно для работы с потоками событий, сжатия одинаковых значений и создания логических блоков данных.
👩💻
@quizcpp
std::ranges::chunk_by (C++23) объединяет последовательные элементы диапазона на основе заданного критерия. Это удобно для работы с потоками событий, сжатия одинаковых значений и создания логических блоков данных.
👩💻
@quizcpp
👍2
⚙️ std::ranges::cartesian_product
std::ranges::cartesian_product (C++23, в некоторых реализациях range-v3) создает декартово произведение нескольких диапазонов. Это полезно для генерации всех комбинаций значений, например, в тестах, сетках параметров и алгоритмах перебора.
👩💻
@quizcpp
std::ranges::cartesian_product (C++23, в некоторых реализациях range-v3) создает декартово произведение нескольких диапазонов. Это полезно для генерации всех комбинаций значений, например, в тестах, сетках параметров и алгоритмах перебора.
👩💻
@quizcpp
👍2
⚙️ std::ranges::stride_view
std::ranges::stride_view (C++23) позволяет пропускать элементы в диапазоне с определенным шагом, создавая разреженное представление. Это удобно для извлечения каждого n-го элемента, обработки интервалов и оптимизации чтения данных.
👩💻
@quizcpp
std::ranges::stride_view (C++23) позволяет пропускать элементы в диапазоне с определенным шагом, создавая разреженное представление. Это удобно для извлечения каждого n-го элемента, обработки интервалов и оптимизации чтения данных.
👩💻
@quizcpp
👍1
⚙️ std::ranges::repeat_view
std::ranges::repeat_view (C++23) создает бесконечный или ограниченный диапазон, который повторяет одно и то же значение. Это полезно для генерации шаблонов, инициализации, заглушек и в сочетании с другими views.
👩💻
@quizcpp
std::ranges::repeat_view (C++23) создает бесконечный или ограниченный диапазон, который повторяет одно и то же значение. Это полезно для генерации шаблонов, инициализации, заглушек и в сочетании с другими views.
👩💻
@quizcpp
👍1
🚫 Антипаттерн недели: Неинициализированные переменные в C++
В C++ переменные не инициализируются автоматически. Использование переменной без явного присваивания — частая и опасная ошибка, которая может привести к неопределённому поведению.
✔️ Всегда инициализируйте переменные при объявлении, особенно локальные.
👩💻
@quizcpp
В C++ переменные не инициализируются автоматически. Использование переменной без явного присваивания — частая и опасная ошибка, которая может привести к неопределённому поведению.
✔️ Всегда инициализируйте переменные при объявлении, особенно локальные.
👩💻
@quizcpp
⚙️ std::has_unique_object_representations
std::has_unique_object_representations — это редкая и малоизвестная мета-функция из стандартной библиотеки, которая возвращает true, если каждая битовая комбинация объекта типа T соответствует уникальному значению.
Это может быть полезно при низкоуровневом сериализовании, побайтовом сравнении, хешировании или оптимизированном сохранении состояния.
👩💻
@quizcpp
std::has_unique_object_representations — это редкая и малоизвестная мета-функция из стандартной библиотеки, которая возвращает true, если каждая битовая комбинация объекта типа T соответствует уникальному значению.
Это может быть полезно при низкоуровневом сериализовании, побайтовом сравнении, хешировании или оптимизированном сохранении состояния.
👩💻
@quizcpp