🌟 Что такое std::variant?
std::variant — это класс-шаблон в стандартной библиотеке C++, который предоставляет механизм для хранения и обработки значения из списка альтернативных типов. Это позволяет программистам создавать переменные, которые могут содержать значения разных типов, известных заранее
📘 Особенности
Безопасность типов: std::variant гарантирует безопасность типов на этапе компиляции. Это означает, что вся обработка значений будет проверена на соответствие типов на этапе компиляции, что помогает избежать ошибок времени выполнения, связанных с неправильным использованием типов данных
std::variant — это класс-шаблон в стандартной библиотеке C++, который предоставляет механизм для хранения и обработки значения из списка альтернативных типов. Это позволяет программистам создавать переменные, которые могут содержать значения разных типов, известных заранее
📘 Особенности
Безопасность типов: std::variant гарантирует безопасность типов на этапе компиляции. Это означает, что вся обработка значений будет проверена на соответствие типов на этапе компиляции, что помогает избежать ошибок времени выполнения, связанных с неправильным использованием типов данных
👉 Что это такое strerror?
strerror является стандартной функцией в языке программирования C++ и предоставляет простой и эффективный способ получения описания ошибки на основе ее кода. Саму же ошибку можно чаще всего взять из errno (глобальная переменная, объявление её лежит в заголовочном файле errno.h)
🔧 Зачем это нужно?
Это очень полезно при обработке ошибок в программе. strerror помогает преобразовать код ошибки, возвращаемый функциями стандартной библиотеки или операционной системы, в человекочитаемое описание, что упрощает понимание и отладку проблем
strerror является стандартной функцией в языке программирования C++ и предоставляет простой и эффективный способ получения описания ошибки на основе ее кода. Саму же ошибку можно чаще всего взять из errno (глобальная переменная, объявление её лежит в заголовочном файле errno.h)
🔧 Зачем это нужно?
Это очень полезно при обработке ошибок в программе. strerror помогает преобразовать код ошибки, возвращаемый функциями стандартной библиотеки или операционной системы, в человекочитаемое описание, что упрощает понимание и отладку проблем
🌟 Что такое std::jthread?
std::jthread — это новый класс потока исполнения (thread) в стандартной библиотеке C++ (начиная с C++20). Он представляет собой управляемый поток, который автоматически завершает свою работу при выходе из области видимости, если он был запущен
📘 В отличие от std::thread, std::jthread предоставляет несколько преимуществ
• Управление временем жизни: std::jthread автоматически завершает свою работу, когда объект std::jthread выходит из области видимости. Это позволяет избежать необходимости явного вызова join() или detach() для завершения потока, что упрощает управление ресурсами
• Безопасное исключение при завершении: Если поток, созданный с помощью std::jthread, был запущен и бросает исключение, прежде чем завершиться, то исключение будет перехвачено и обработано, прежде чем поток завершится. Это делает код более безопасным и предотвращает утечку ресурсов
std::jthread — это новый класс потока исполнения (thread) в стандартной библиотеке C++ (начиная с C++20). Он представляет собой управляемый поток, который автоматически завершает свою работу при выходе из области видимости, если он был запущен
📘 В отличие от std::thread, std::jthread предоставляет несколько преимуществ
• Управление временем жизни: std::jthread автоматически завершает свою работу, когда объект std::jthread выходит из области видимости. Это позволяет избежать необходимости явного вызова join() или detach() для завершения потока, что упрощает управление ресурсами
• Безопасное исключение при завершении: Если поток, созданный с помощью std::jthread, был запущен и бросает исключение, прежде чем завершиться, то исключение будет перехвачено и обработано, прежде чем поток завершится. Это делает код более безопасным и предотвращает утечку ресурсов
🛠️ Что такое C++ Streams?
В контексте C++, потоки (streams) представляют собой механизм для работы с вводом и выводом данных. Они обеспечивают абстракцию над различными источниками и приемниками данных, такими как консоль, файлы и строки, позволяя программистам работать с ними с помощью общего интерфейса
Основные реализации потоков в C++
• std::cin и std::cout: Это стандартные потоки ввода и вывода, которые обычно используются для взаимодействия с консолью
• std::ifstream и std::ofstream: Это классы потоков для работы с файлами
• std::stringstream: Этот класс потока позволяет работать с данными как с потоком, хранящимся в строке. Он может использоваться для выполнения операций ввода-вывода с помощью строкового представления данных
Преимущества использования потоков
• Удобство в использовании
• Возможность абстрагировать ввод-вывод от конкретных источников и приемников данных
• Поддержку различных типов данных
В контексте C++, потоки (streams) представляют собой механизм для работы с вводом и выводом данных. Они обеспечивают абстракцию над различными источниками и приемниками данных, такими как консоль, файлы и строки, позволяя программистам работать с ними с помощью общего интерфейса
Основные реализации потоков в C++
• std::cin и std::cout: Это стандартные потоки ввода и вывода, которые обычно используются для взаимодействия с консолью
• std::ifstream и std::ofstream: Это классы потоков для работы с файлами
• std::stringstream: Этот класс потока позволяет работать с данными как с потоком, хранящимся в строке. Он может использоваться для выполнения операций ввода-вывода с помощью строкового представления данных
Преимущества использования потоков
• Удобство в использовании
• Возможность абстрагировать ввод-вывод от конкретных источников и приемников данных
• Поддержку различных типов данных
📋 Задача Простые числа
Создайте функцию, которая находит количество простых чисел до заданного целого числа
📚 Подход к решению
• Решето Эратосфена на Си
How Many «Prime Numbers» Are There? (edabit)
Создайте функцию, которая находит количество простых чисел до заданного целого числа
📚 Подход к решению
• Решето Эратосфена на Си
How Many «Prime Numbers» Are There? (edabit)
Каким будет результат следующего фрагмента кода на C++?
Anonymous Quiz
2%
10.0 5
90%
10 2.5
3%
10.0 5.0
4%
5.0 2.5
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🧑💻 В чём проблема ромбовидного наследования?
Ромбовидное наследование (или diamond inheritance) возникает, когда один класс наследуется от двух классов, которые сами наследуются от общего предка
🔍 Проблемы
• Если базовый класс имеет общие поля или методы, то не понятно какая из реализаций будет использована в классе наследнике
• Сложность читать такой код, особенно если предков больше двух и общий предок находится глубоко в иерархии наследования
Ромбовидное наследование (или diamond inheritance) возникает, когда один класс наследуется от двух классов, которые сами наследуются от общего предка
🔍 Проблемы
• Если базовый класс имеет общие поля или методы, то не понятно какая из реализаций будет использована в классе наследнике
• Сложность читать такой код, особенно если предков больше двух и общий предок находится глубоко в иерархии наследования
Функциональное программирование
Тема функционального программирования не новая для C++, но крайне полезная. Лямбда-функции и функторы часто встречаются в коде и хорошо бы с ними уметь работать без обращения к гуглу и лишней головной боли. Да и на собеседования не редко попадаются вопросы на эту тему
На youtube канале C++ User Group как раз вышло новое видео посвящённое данной теме
Элементы функционального программирования в языке C++
Тема функционального программирования не новая для C++, но крайне полезная. Лямбда-функции и функторы часто встречаются в коде и хорошо бы с ними уметь работать без обращения к гуглу и лишней головной боли. Да и на собеседования не редко попадаются вопросы на эту тему
На youtube канале C++ User Group как раз вышло новое видео посвящённое данной теме
Элементы функционального программирования в языке C++
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
📋 Что лучше использовать const или define?
define — это директива препроцессора в языке C++, которая заменяет указанный текст в коде на заданное значение до компиляции. Однако define не учитывает типы данных или области видимости и может привести к созданию множества копий значения в объектном коде. Это усложняет отладку, так как define не имеет имени, только значение
В отличие от define, ключевое слово const в C++ предоставляет тип данных, область видимости и позволяет взять адрес переменной или создать ссылку на нее. Поэтому использование const предпочтительнее, так как обеспечивает большую четкость и безопасность кода
Для чего нужен шаблон Singleton?
Основная причина использования Singleton — обеспечение доступа к одному ресурсу из разных мест исходного кода, например взаимодействием с одним файлом или сетевым взаимодействием
В C++ для реализации можно использовать static переменные, потому что они имеют защиту от одновременного доступа к переменной
Основная причина использования Singleton — обеспечение доступа к одному ресурсу из разных мест исходного кода, например взаимодействием с одним файлом или сетевым взаимодействием
В C++ для реализации можно использовать static переменные, потому что они имеют защиту от одновременного доступа к переменной
⏰ Какое время жизни у переменных?
• Статическое — это глобальные (в том числе и static). Живут всё время выполнения процесса. Конструкторы вызываются до функции main и после выхода из неё вызываются деструкторы
• Потоковые — другое название thread_local. Ведут себя как глобальные, но в каждом потоке есть своя переменная. Их существует столько сколько и потоков
• Автоматические — располагаются на стеке. Это аргументы функции, локальные переменные, возвращаемые значения. За такими переменными следит компилятор
• Динамические - выделяется с помощью new и delete или malloc и free. В этом случае компилятор полностью отдаёт возможность управления в руки разработчика
• Статическое — это глобальные (в том числе и static). Живут всё время выполнения процесса. Конструкторы вызываются до функции main и после выхода из неё вызываются деструкторы
• Потоковые — другое название thread_local. Ведут себя как глобальные, но в каждом потоке есть своя переменная. Их существует столько сколько и потоков
• Автоматические — располагаются на стеке. Это аргументы функции, локальные переменные, возвращаемые значения. За такими переменными следит компилятор
• Динамические - выделяется с помощью new и delete или malloc и free. В этом случае компилятор полностью отдаёт возможность управления в руки разработчика
🖥 Курс Эффективное использование С++
📚 Лекция 1. Начнем с основ: библиотеки, утилиты, средства разработки и сборка проектов в С++. Присоединяйтесь, чтобы узнать, как максимально эффективно использовать ресурсы вашего проекта!
🔍 Лекция 2. Глубже в тему работы с памятью: избегаем утечек ресурсов с помощью RAII и умных указателей. Узнаем, как управлять памятью без лишних хлопот
➡️ Лекция 3. Переходим к Move semantics, rvalue reference и perfect forwarding. Открываем новые возможности и улучшаем производительность нашего кода
🔄 Лекция 4. Обсудим callbacks: лямбда-выражения, bind и function. Узнаем, как делать наш код более гибким и модульным
🧵 Лекция 5. Многопоточность в C++. Разбираемся с потоками, блокировками, задачами, атомарными операциями и очередями сообщений
💡 Лекция 6. Обзор возможностей современных стандартов C++. Узнаем, какие новшества есть в мире С++ и как они могут улучшить наш код
👉 Ссылка на курс
📚 Лекция 1. Начнем с основ: библиотеки, утилиты, средства разработки и сборка проектов в С++. Присоединяйтесь, чтобы узнать, как максимально эффективно использовать ресурсы вашего проекта!
🔍 Лекция 2. Глубже в тему работы с памятью: избегаем утечек ресурсов с помощью RAII и умных указателей. Узнаем, как управлять памятью без лишних хлопот
➡️ Лекция 3. Переходим к Move semantics, rvalue reference и perfect forwarding. Открываем новые возможности и улучшаем производительность нашего кода
🔄 Лекция 4. Обсудим callbacks: лямбда-выражения, bind и function. Узнаем, как делать наш код более гибким и модульным
🧵 Лекция 5. Многопоточность в C++. Разбираемся с потоками, блокировками, задачами, атомарными операциями и очередями сообщений
💡 Лекция 6. Обзор возможностей современных стандартов C++. Узнаем, какие новшества есть в мире С++ и как они могут улучшить наш код
👉 Ссылка на курс
🔮 Самые частые суффиксы для алгоритмов
• std::*_n — вместо диапазона значений используется количество
• std::*_if — предикат вместо значения
• std::*_copy — результат копируется в новый структуру данных
👉 Ссылка на список алгоритмов
• std::*_n — вместо диапазона значений используется количество
• std::*_if — предикат вместо значения
• std::*_copy — результат копируется в новый структуру данных
👉 Ссылка на список алгоритмов