⚙️ std::ranges::views::filter
std::ranges::views::filter (C++20) предоставляет удобный способ фильтрации элементов в диапазоне без необходимости создавать временные контейнеры. Это улучшает читаемость и производительность кода.
🔗 Документация (https://en.cppreference.com/w/cpp/ranges/filter_view)
👩💻
@quizcpp
std::ranges::views::filter (C++20) предоставляет удобный способ фильтрации элементов в диапазоне без необходимости создавать временные контейнеры. Это улучшает читаемость и производительность кода.
🔗 Документация (https://en.cppreference.com/w/cpp/ranges/filter_view)
👩💻
@quizcpp
⚙️ std::unordered_map::merge()
Функция std::unordered_map::merge() дает возможность соединить два unordered_map, перемещая элементы из одного контейнера в другой без создания дубликатов и копирования. Это удобно для объединения данных без необходимости явного копирования ключей и значений.
🔗 Документация (https://en.cppreference.com/w/cpp/container/unordered_map/merge)
👩💻
@quizcpp
Функция std::unordered_map::merge() дает возможность соединить два unordered_map, перемещая элементы из одного контейнера в другой без создания дубликатов и копирования. Это удобно для объединения данных без необходимости явного копирования ключей и значений.
🔗 Документация (https://en.cppreference.com/w/cpp/container/unordered_map/merge)
👩💻
@quizcpp
Во что компилятор C++ превращает код, или ускоряем код безопасно
https://habr.com/ru/companies/ascon/articles/850406/
https://habr.com/ru/companies/ascon/articles/850406/
Хабр
Во что компилятор C++ превращает код, или ускоряем код безопасно
Привет, Хабр! Меня зовут Алексей Салтыков, я инженер-программист в команде КОМПАС-3D. Решил поделиться соображениями насчет оптимизаций в С++ глазами обычного разработчика. Хочется сразу предупредить,...
⚙️ std::bitset::to_ullong()
Метод std::bitset::to_ullong() преобразует битовое представление в беззнаковое целое число типа long long. Это удобно для работы с битовыми масками, сетевыми протоколами и эффективным хранением флагов.
🔗 Документация (https://en.cppreference.com/w/cpp/utility/bitset/to_ullong)
👩💻
@quizcpp
Метод std::bitset::to_ullong() преобразует битовое представление в беззнаковое целое число типа long long. Это удобно для работы с битовыми масками, сетевыми протоколами и эффективным хранением флагов.
🔗 Документация (https://en.cppreference.com/w/cpp/utility/bitset/to_ullong)
👩💻
@quizcpp
⚙️ std::filesystem::hard_link_count()
std::filesystem::hard_link_count() даёт возможность узнать количество жёстких ссылок на файл. Это полезно для взаимодействия с файловыми системами, проверки ссылок на один и тот же файл, а также для анализа структуры папок.
🔗 Документация (https://en.cppreference.com/w/cpp/filesystem/hard_link_count)
👩💻
@quizcpp
std::filesystem::hard_link_count() даёт возможность узнать количество жёстких ссылок на файл. Это полезно для взаимодействия с файловыми системами, проверки ссылок на один и тот же файл, а также для анализа структуры папок.
🔗 Документация (https://en.cppreference.com/w/cpp/filesystem/hard_link_count)
👩💻
@quizcpp
⚙️ std::unordered_map::emplace_hint()
Метод std::unordered_map::emplace_hint() позволяет добавлять элементы в хеш-таблицу, используя подсказку для улучшения производительности. Это особенно полезно, если известно, где примерно должен находиться новый элемент, что ускоряет процесс вставки.
🔗 Документация (https://en.cppreference.com/w/cpp/container/unordered_map/emplace_hint)
👩💻
@quizcpp
Метод std::unordered_map::emplace_hint() позволяет добавлять элементы в хеш-таблицу, используя подсказку для улучшения производительности. Это особенно полезно, если известно, где примерно должен находиться новый элемент, что ускоряет процесс вставки.
🔗 Документация (https://en.cppreference.com/w/cpp/container/unordered_map/emplace_hint)
👩💻
@quizcpp
⚙️ std::unordered_map::emplace_hint()
Функция std::unordered_map::emplace_hint() дает возможность добавлять элементы в хеш-таблицу с указанием места для улучшения производительности. Это особенно удобно, если известно, где примерно должен находиться новый элемент, что ускоряет процесс вставки.
🔗 Документация (https://en.cppreference.com/w/cpp/container/unordered_map/emplace_hint)
👩💻
@quizcpp
Функция std::unordered_map::emplace_hint() дает возможность добавлять элементы в хеш-таблицу с указанием места для улучшения производительности. Это особенно удобно, если известно, где примерно должен находиться новый элемент, что ускоряет процесс вставки.
🔗 Документация (https://en.cppreference.com/w/cpp/container/unordered_map/emplace_hint)
👩💻
@quizcpp
⚙️ std::deque::shrink_to_fit()
Метод std::deque::shrink_to_fit() освобождает лишнюю память, используемую std::deque, уменьшая его вместимость до реального размера. Это помогает оптимизировать использование памяти после удаления элементов.
🔗 Документация (https://en.cppreference.com/w/cpp/container/deque/shrink_to_fit)
👩💻
@quizcpp
Метод std::deque::shrink_to_fit() освобождает лишнюю память, используемую std::deque, уменьшая его вместимость до реального размера. Это помогает оптимизировать использование памяти после удаления элементов.
🔗 Документация (https://en.cppreference.com/w/cpp/container/deque/shrink_to_fit)
👩💻
@quizcpp
⚙️ std::unique_ptr::release()
Метод std::unique_ptr::release() освобождает управление объектом, не удаляя его, и возвращает сырой указатель. Это удобно, когда необходимо передать право владения ресурсом другому управляемому указателю или самостоятельно управлять памятью.
🔗 Документация (https://en.cppreference.com/w/cpp/memory/unique_ptr/release)
👩💻
@quizcpp
Метод std::unique_ptr::release() освобождает управление объектом, не удаляя его, и возвращает сырой указатель. Это удобно, когда необходимо передать право владения ресурсом другому управляемому указателю или самостоятельно управлять памятью.
🔗 Документация (https://en.cppreference.com/w/cpp/memory/unique_ptr/release)
👩💻
@quizcpp
🚫 Антипаттерн недели: Неиспользование const для неизменяемых данных
В C++ применение const помогает защитить данные от случайных изменений, делает код более понятным и позволяет компилятору оптимизировать выполнение программы.
✔️ Используйте const, если переменная, параметр или метод не должны изменяться.
👩💻
@quizcpp
В C++ применение const помогает защитить данные от случайных изменений, делает код более понятным и позволяет компилятору оптимизировать выполнение программы.
✔️ Используйте const, если переменная, параметр или метод не должны изменяться.
👩💻
@quizcpp
⚙️ std::source_location::current()
std::source_location::current() (C++20) позволяет узнать информацию о месте, откуда была вызвана функция, включая имя файла, номер строки и название функции. Это полезно для ведения логов, отладки и отслеживания кода.
🔗 Документация (https://en.cppreference.com/w/cpp/utility/source_location)
👩💻
@quizcpp
std::source_location::current() (C++20) позволяет узнать информацию о месте, откуда была вызвана функция, включая имя файла, номер строки и название функции. Это полезно для ведения логов, отладки и отслеживания кода.
🔗 Документация (https://en.cppreference.com/w/cpp/utility/source_location)
👩💻
@quizcpp
⚙️ std::launder()
std::launder() (C++17) применяется для правильного доступа к объектам после изменения их типа с помощью размещенного new. Это важно при работе с низкоуровневыми оптимизациями, аллокаторами и изменяемыми объектами.
🔗 Документация (https://en.cppreference.com/w/cpp/utility/launder)
👩💻
@quizcpp
std::launder() (C++17) применяется для правильного доступа к объектам после изменения их типа с помощью размещенного new. Это важно при работе с низкоуровневыми оптимизациями, аллокаторами и изменяемыми объектами.
🔗 Документация (https://en.cppreference.com/w/cpp/utility/launder)
👩💻
@quizcpp
⚙️ std::experimental::sample
std::experimental::sample (C++17) предоставляет возможность случайным образом выбирать элементы из контейнера, не перемешивая всю последовательность. Это удобно для эффективной случайной выборки данных.
🔗 Документация (https://en.cppreference.com/w/cpp/algorithm/sample)
👩💻
@quizcpp
std::experimental::sample (C++17) предоставляет возможность случайным образом выбирать элементы из контейнера, не перемешивая всю последовательность. Это удобно для эффективной случайной выборки данных.
🔗 Документация (https://en.cppreference.com/w/cpp/algorithm/sample)
👩💻
@quizcpp
⚙️ std::filesystem::unique_path()
Функция std::filesystem::unique_path() создает случайное имя для файла или папки, используя определенный шаблон. Это удобно для создания временных файлов, чтобы избежать проблем с совпадением имен.
👩💻
@quizcpp
Функция std::filesystem::unique_path() создает случайное имя для файла или папки, используя определенный шаблон. Это удобно для создания временных файлов, чтобы избежать проблем с совпадением имен.
👩💻
@quizcpp
⚙️ std::atomic_signal_fence()
std::atomic_signal_fence() помогает избежать оптимизации порядка команд со стороны компилятора, не затрагивая при этом процессорные барьеры. Это особенно важно для синхронизации между обычным кодом и обработчиками сигналов.
👩💻
@quizcpp
std::atomic_signal_fence() помогает избежать оптимизации порядка команд со стороны компилятора, не затрагивая при этом процессорные барьеры. Это особенно важно для синхронизации между обычным кодом и обработчиками сигналов.
👩💻
@quizcpp
🚫 Антипаттерн недели: Отсутствие виртуальности в деструкторах базовых классов
В C++, если деструктор базового класса не является виртуальным, объекты производных классов могут быть уничтожены неправильно, что может привести к утечке памяти.
✔️ Всегда делайте деструкторы виртуальными в полиморфных классах.
👩💻
@quizcpp
В C++, если деструктор базового класса не является виртуальным, объекты производных классов могут быть уничтожены неправильно, что может привести к утечке памяти.
✔️ Всегда делайте деструкторы виртуальными в полиморфных классах.
👩💻
@quizcpp
🚫 Антипаттерн недели: Применение malloc() вместо new
В C++ функция malloc() не вызывает конструктор объекта, что может привести к неправильной инициализации данных. Использование new является более предпочтительным, так как оно корректно создает объект.
✔️ При работе с объектами используйте new вместо malloc().
👩💻
@quizcpp
В C++ функция malloc() не вызывает конструктор объекта, что может привести к неправильной инициализации данных. Использование new является более предпочтительным, так как оно корректно создает объект.
✔️ При работе с объектами используйте new вместо malloc().
👩💻
@quizcpp
⚙️ std::destroy_at()
std::destroy_at() (C++17) позволяет вручную вызвать деструктор объекта, не освобождая при этом память. Это удобно при использовании нестандартных аллокаторов или при ручном управлении памятью.
👩💻
@quizcpp
std::destroy_at() (C++17) позволяет вручную вызвать деструктор объекта, не освобождая при этом память. Это удобно при использовании нестандартных аллокаторов или при ручном управлении памятью.
👩💻
@quizcpp