➡️ Способ повысить эффективность: цикл Range-based for в C++
Цикл Range-based for — это удобный и эффективный способ перебора элементов контейнера в C++.
• Код становится проще и понятнее благодаря применению цикла Range-based for.
• Защита кода улучшается, так как автоматически исключается выход за границы контейнера.
• Компилятор сам оптимизирует код для максимальной производительности.
👩💻
@quizcpp
Цикл Range-based for — это удобный и эффективный способ перебора элементов контейнера в C++.
• Код становится проще и понятнее благодаря применению цикла Range-based for.
• Защита кода улучшается, так как автоматически исключается выход за границы контейнера.
• Компилятор сам оптимизирует код для максимальной производительности.
👩💻
@quizcpp
➡️ Корутины для асинхронного программирования
Корутины делают процесс создания сложных асинхронных приложений проще и помогают лучше использовать ресурсы. Они дают возможность писать асинхронный код так, будто он синхронный.
• Способствуют более эффективному использованию ресурсов, предотвращая блокировки и увеличивая производительность.
• Легко сочетаются с современными библиотеками и фреймворками, поддерживая актуальные подходы в программировании.
👩💻
@quizcpp
Корутины делают процесс создания сложных асинхронных приложений проще и помогают лучше использовать ресурсы. Они дают возможность писать асинхронный код так, будто он синхронный.
• Способствуют более эффективному использованию ресурсов, предотвращая блокировки и увеличивая производительность.
• Легко сочетаются с современными библиотеками и фреймворками, поддерживая актуальные подходы в программировании.
👩💻
@quizcpp
➡️ Циклы for для перебора элементов в заданном диапазоне
• Упрощённый способ обхода элементов контейнера.
std::array a {1, 2, 3, 4, 5};
for (int& x : a) x *= 2;
// a == { 2, 4, 6, 8, 10 }
• Обратите внимание на различие между использованием int и int&:
std::array a {1, 2, 3, 4, 5};
for (int x : a) x *= 2;
// a == { 1, 2, 3, 4, 5 }
👩💻
@quizcpp
• Упрощённый способ обхода элементов контейнера.
std::array a {1, 2, 3, 4, 5};
for (int& x : a) x *= 2;
// a == { 2, 4, 6, 8, 10 }
• Обратите внимание на различие между использованием int и int&:
std::array a {1, 2, 3, 4, 5};
for (int x : a) x *= 2;
// a == { 1, 2, 3, 4, 5 }
👩💻
@quizcpp
➡️ Умные указатели в C++
Умные указатели — это эффективный механизм в C++, который обеспечивает автоматическое управление памятью и помогает избежать проблем с её утечкой. Рассмотрим, как они функционируют.
• Память автоматически освобождается при выходе из области видимости, что предотвращает утечки.
• Снижается риск ошибок при работе с памятью, таких как двойное удаление или обращение к нулевому указателю.
• Использовать их просто и удобно, поскольку умные указатели ведут себя как обычные указатели.
👩💻
@quizcpp
Умные указатели — это эффективный механизм в C++, который обеспечивает автоматическое управление памятью и помогает избежать проблем с её утечкой. Рассмотрим, как они функционируют.
• Память автоматически освобождается при выходе из области видимости, что предотвращает утечки.
• Снижается риск ошибок при работе с памятью, таких как двойное удаление или обращение к нулевому указателю.
• Использовать их просто и удобно, поскольку умные указатели ведут себя как обычные указатели.
👩💻
@quizcpp
➡️ Путь к утонченности: применение диапазонных циклов
• Диапазонные циклы (range-based for loop) предоставляют удобный и изящный способ проходить по элементам контейнеров. Эта конструкция делает код короче и понятнее.
• Диапазонные циклы помогают избежать повторения кода и уменьшают количество шаблонного кода, благодаря чему они становятся более лаконичными и удобными для восприятия.
• Синтаксис диапазонных циклов прост и легко запоминается, что делает их отличным выбором для обхода элементов контейнеров.
• Диапазонные циклы обеспечивают безопасное прохождение по контейнерам, предотвращая выход за границы и другие ошибки.
👩💻
@quizcpp
• Диапазонные циклы (range-based for loop) предоставляют удобный и изящный способ проходить по элементам контейнеров. Эта конструкция делает код короче и понятнее.
• Диапазонные циклы помогают избежать повторения кода и уменьшают количество шаблонного кода, благодаря чему они становятся более лаконичными и удобными для восприятия.
• Синтаксис диапазонных циклов прост и легко запоминается, что делает их отличным выбором для обхода элементов контейнеров.
• Диапазонные циклы обеспечивают безопасное прохождение по контейнерам, предотвращая выход за границы и другие ошибки.
👩💻
@quizcpp
➡️ Пользовательские литералы
• В основном это могут быть реальные единицы измерения, такие как kb, mb, км, см, рубли, доллары, евро и так далее. Пользовательские литералы дают возможность не создавать функции для преобразования единиц во время выполнения, а работать с ними как с другими примитивными типами.
• Это очень удобно для работы с единицами и измерениями.
• С помощью добавления constexpr можно обеспечить отсутствие влияния на производительность во время выполнения.
👩💻
@quizcpp
• В основном это могут быть реальные единицы измерения, такие как kb, mb, км, см, рубли, доллары, евро и так далее. Пользовательские литералы дают возможность не создавать функции для преобразования единиц во время выполнения, а работать с ними как с другими примитивными типами.
• Это очень удобно для работы с единицами и измерениями.
• С помощью добавления constexpr можно обеспечить отсутствие влияния на производительность во время выполнения.
👩💻
@quizcpp
➡️ Концепты (Concepts) в C++
Концепты - это новая возможность в C++20, которая позволяет задавать ограничения на шаблонные параметры. Это позволяет писать более безопасный и читаемый код, поскольку компилятор проверяет соответствие типов требованиям концептов на этапе компиляции.
• template concept Arithmetic = std::is_arithmetic_v; определяет концепт Arithmetic, который ограничивает типы, для которых значение std::is_arithmetic_v истинно (т.е. типы, которые являются арифметическими).
• template T add(const T& a, const T& b) определяет шаблонную функцию add, которая будет компилироваться только для типов, удовлетворяющих концепту Arithmetic.
Использование функции add:
• Примеры с целыми числами и числами с плавающей запятой успешно вызывают функцию add.
• Пример со строками (закомментированный) вызовет ошибку компиляции, так как std::string не является арифметическим типом.
👩💻
@quizcpp
Концепты - это новая возможность в C++20, которая позволяет задавать ограничения на шаблонные параметры. Это позволяет писать более безопасный и читаемый код, поскольку компилятор проверяет соответствие типов требованиям концептов на этапе компиляции.
• template concept Arithmetic = std::is_arithmetic_v; определяет концепт Arithmetic, который ограничивает типы, для которых значение std::is_arithmetic_v истинно (т.е. типы, которые являются арифметическими).
• template T add(const T& a, const T& b) определяет шаблонную функцию add, которая будет компилироваться только для типов, удовлетворяющих концепту Arithmetic.
Использование функции add:
• Примеры с целыми числами и числами с плавающей запятой успешно вызывают функцию add.
• Пример со строками (закомментированный) вызовет ошибку компиляции, так как std::string не является арифметическим типом.
👩💻
@quizcpp
➡️ Строго типизированные перечисления
• Типобезопасные перечисления, которые решают множество проблем с C-перечислениями, включая неявные преобразования, арифметические операции, невозможность указать базовый тип, загрязнение области видимости и т.д.
👩💻
@quizcpp
• Типобезопасные перечисления, которые решают множество проблем с C-перечислениями, включая неявные преобразования, арифметические операции, невозможность указать базовый тип, загрязнение области видимости и т.д.
👩💻
@quizcpp
👍1
➡️ Наследование с помощью private и public
• Использование private и public при наследовании в C++ позволяет контролировать доступ к членам базового класса в производных классах.
• Это может быть полезно для сокрытия частей реализации базового класса от внешнего мира или ограничения доступа к членам в иерархии классов.
• Эта фишка особенно полезна при проектировании классов и их взаимодействия, позволяя более гибко управлять доступом к данным и методам в рамках наследования.
👩💻
@quizcpp
• Использование private и public при наследовании в C++ позволяет контролировать доступ к членам базового класса в производных классах.
• Это может быть полезно для сокрытия частей реализации базового класса от внешнего мира или ограничения доступа к членам в иерархии классов.
• Эта фишка особенно полезна при проектировании классов и их взаимодействия, позволяя более гибко управлять доступом к данным и методам в рамках наследования.
👩💻
@quizcpp
➡️ Как включить все стандартные библиотеки одной командой
Чтобы разом включить в проект все стандартные библиотеки, используйте #include . Это особенно полезно в условиях дефицита времени на соревнованиях по программированию.
• Например, вы можете заменить этот фрагмент (и многие другие):
#include
#include
#include
#include
#include
#include
#include
#include
• Простой строкой:
#include
👩💻
@quizcpp
Чтобы разом включить в проект все стандартные библиотеки, используйте #include . Это особенно полезно в условиях дефицита времени на соревнованиях по программированию.
• Например, вы можете заменить этот фрагмент (и многие другие):
#include
#include
#include
#include
#include
#include
#include
#include
• Простой строкой:
#include
👩💻
@quizcpp
👍1
➡️ Индексирование массива (Оператор подиндексации) является коммутативным
Индексирование массива — обычная операция для всех программистов и в целом одинаково во всех языках программирования. Однако в C++ вы можете поменять местами массив и индекс, получая такой код:
int arr[] = {1, 2, 3, 4};
std::cout
@quizcpp
Индексирование массива — обычная операция для всех программистов и в целом одинаково во всех языках программирования. Однако в C++ вы можете поменять местами массив и индекс, получая такой код:
int arr[] = {1, 2, 3, 4};
std::cout
@quizcpp
➡️ Утверждение Валидности
Утверждения помогают проверять корректность выражений с помощью макроса assert из заголовочного файла . Это полезно для отладки, чтобы проверить правильность значения переменной.
Если выражение равно 0 (ложь), выводится сообщение об ошибке, и программа завершается.
🗣️ Например, переменная maxsize никогда не должна превышать 1024. Можно использовать утверждение для проверки значения и вывода сообщения об ошибке, если значение некорректно.
#include
int main() {
assert(maxsize
@quizcpp
Утверждения помогают проверять корректность выражений с помощью макроса assert из заголовочного файла . Это полезно для отладки, чтобы проверить правильность значения переменной.
Если выражение равно 0 (ложь), выводится сообщение об ошибке, и программа завершается.
🗣️ Например, переменная maxsize никогда не должна превышать 1024. Можно использовать утверждение для проверки значения и вывода сообщения об ошибке, если значение некорректно.
#include
int main() {
assert(maxsize
@quizcpp
➡️ Магия byte
Не многие знаю что существует тип переменной byte. Число этого типа может быть в диапазоне от 0 до 255.
👀 А теперь посмотрите насколько это удобно использовать для хранения значений аналоговых входов Просто идеально… Главное в минус не загоняйте число)
🗣 А, и занимает это чудо в 2 раза меньше памяти. За такое вас по головке поглядят.
👩💻
@quizcpp
Не многие знаю что существует тип переменной byte. Число этого типа может быть в диапазоне от 0 до 255.
👀 А теперь посмотрите насколько это удобно использовать для хранения значений аналоговых входов Просто идеально… Главное в минус не загоняйте число)
🗣 А, и занимает это чудо в 2 раза меньше памяти. За такое вас по головке поглядят.
👩💻
@quizcpp
➡️ Вложенные макросы
Используйте вложенные макросы везде. Это хороший способ сократить код.
• Макрос LOG: Выводит сообщение в консоль.
• Макрос ADD: Складывает два числа.
• Макрос ADD_AND_LOG: Сложение двух чисел и вывод результата в консоль с использованием вложенных макросов.
👩💻
@quizcpp
Используйте вложенные макросы везде. Это хороший способ сократить код.
• Макрос LOG: Выводит сообщение в консоль.
• Макрос ADD: Складывает два числа.
• Макрос ADD_AND_LOG: Сложение двух чисел и вывод результата в консоль с использованием вложенных макросов.
👩💻
@quizcpp
➡️ Использование алиасов для длинных типов
Это позволяет значительно упростить код, сделать его более читаемым и легким для поддержки.
• Например:
typedef std::vector StrVector;
👩💻
@quizcpp
Это позволяет значительно упростить код, сделать его более читаемым и легким для поддержки.
• Например:
typedef std::vector StrVector;
👩💻
@quizcpp
🔥1
➡️ Библиотека EasyLogging++
EasyLogging++ — это мощная и гибкая библиотека логирования для C++, которая поддерживает многопоточность и настраиваемый вывод. Она легко интегрируется в проекты и позволяет быстро настроить логирование с различными уровнями детализации, отладкой и фильтрацией.
• EasyLogging++ — отличный выбор, если требуется добавить логирование в проект с минимальными усилиями и высокой производительностью.
🔗 Ссылочка на доку (https://github.com/abumq/easyloggingpp)
👩💻
@quizcpp
EasyLogging++ — это мощная и гибкая библиотека логирования для C++, которая поддерживает многопоточность и настраиваемый вывод. Она легко интегрируется в проекты и позволяет быстро настроить логирование с различными уровнями детализации, отладкой и фильтрацией.
• EasyLogging++ — отличный выбор, если требуется добавить логирование в проект с минимальными усилиями и высокой производительностью.
🔗 Ссылочка на доку (https://github.com/abumq/easyloggingpp)
👩💻
@quizcpp
Библиотека Armadillo
Armadillo — это высококачественная библиотека линейной алгебры для C++, разработанная Конрадом Сандерсоном. Она создана для обеспечения эффективных и простых в использовании матричных операций с интерфейсом, похожим на Matlab или Octave.
👩💻
@quizcpp
Armadillo — это высококачественная библиотека линейной алгебры для C++, разработанная Конрадом Сандерсоном. Она создана для обеспечения эффективных и простых в использовании матричных операций с интерфейсом, похожим на Matlab или Octave.
👩💻
@quizcpp
Библиотека Eigen
Eigen — это библиотека с открытым исходным кодом для языка программирования C++, предназначенная для выполнения операций линейной алгебры.
Она написана с использованием шаблонов и обеспечивает эффективный и удобный интерфейс для работы с векторами, матрицами и другими алгебраическими структурами.
👩💻
@quizcpp
Eigen — это библиотека с открытым исходным кодом для языка программирования C++, предназначенная для выполнения операций линейной алгебры.
Она написана с использованием шаблонов и обеспечивает эффективный и удобный интерфейс для работы с векторами, матрицами и другими алгебраическими структурами.
👩💻
@quizcpp
👍1