11482
Изучаем C++. По вопросам сотрудничества: @adv_and_pr РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba
⚙️ std::tie
Функция std::tie из заголовка <tuple> используется для создания кортежа ссылок, что позволяет удобно распаковывать значения из функций или объектов. Это упрощает многозначные возвраты и код чтения данных.
Как построить облако с нуля? Узнайте от разработчиков новой облачной платформы MWS.
MWS запускает реалити-проект Building the Cloud о создании новой публичной облачной платформы. В прямом эфире наши эксперты и инженеры раскрывают закулисье облачной разработки, делятся уникальным опытом и отвечают на вопросы.
В первом выпуске расскажем о сердце облака — сервисе Compute.
О чём поговорим:
● Зачем мы строим новое публичное облако MWS
● Как устроена архитектура сервиса Compute в новой платформе MWS
● Что происходит «под капотом» облака, когда создаётся виртуальная машина
● Расскажем о планах и роудмапе новой платформы
Приглашаем разработчиков и профессионалов облачного рынка! Задайте свои вопросы разработчикам нового облака MWS и узнайте всё из первых рук.
📅 Дата: 20 ноября 2024, 11:00
👉 Регистрируйтесь сейчас, чтобы не пропустить эфир
Что такое std::move в C++ и как он используется?
Ответ ⬇️
std::move — это стандартная функция в C++, которая позволяет указать, что объект может быть "перемещён", т.е. его ресурсы могут быть переданы другому объекту, а не скопированы. Перемещение особенно полезно для объектов, которые управляют большими ресурсами, например, динамической памятью. В результате std::move позволяет избежать затратных операций копирования и повысить производительность, передавая ресурсы, а не создавая их дубликаты.
Пример использования ⚙️
#include <iostream>
#include <string>
#include <utility> // для std::move
void processData(std::string str) {
std::cout << "Processing: " << str << std::endl;
}
int main() {
std::string data = "Sample Data";
// Передаем строку через std::move, что позволяет избежать копирования
processData(std::move(data));
// data теперь не определена после std::move
std::cout << "Data после std::move: " << data << std::endl; // результат не гарантирован
return 0;
}
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
Для func(10) вызывается специализированная версия функции для int. Для func(10.5) вызывается шаблонная версия, так как точного соответствия нет.
➡️ RaftLib — современная библиотека для параллельной обработки данных в C++
RaftLib — это библиотека с открытым исходным кодом, упрощающая разработку высокопроизводительных параллельных приложений на C++. Она позволяет создавать масштабируемые системы обработки данных, используя концепцию потоков и конвейеров.• Интуитивный интерфейс: Напоминает стандартные потоки C++, облегчая освоение.• Автоматическая параллелизация: Управляет потоками и распределением задач для оптимальной производительности.• Гибкость и масштабируемость: Эффективна как на локальных системах, так и в распределённых средах.
🔗 Ссылочка на доку
⚙️ std::transform_reduce
Функция std::transform_reduce из заголовка <numeric> объединяет возможности std::transform и std::accumulate, позволяя сначала применить операцию к каждому элементу, а затем свести их к одному значению. Это полезно для производительного параллельного вычисления сумм, произведений и других операций.
👩💻 Задача по C++: Подсчёт гласных и согласных в строке
Напишите функцию на C++, которая принимает строку и подсчитывает количество гласных и согласных букв. Функция должна игнорировать пробелы, цифры и другие символы, не являющиеся буквами. В основной функции main() вызовите эту функцию и выведите результат в консоль.
Пример:
"Hello, World!"
Гласные: 3
Согласные: 7
➡️ GSL: Библиотека численных методов для C/C++ разработчиков
GSL – бесплатная библиотека для C и C++, включающая комплексные числа, матрицы, полиномы и анализ. Она проста в использовании, безопасна для многопоточности и не имеет зависимостей.• Поддержка множества математических операций.• Потокобезопасность и отсутствие зависимостей для надёжной интеграции в проекты.
🔗 Ссылочка на доку
➡️ Что такое constexpr в C++?
constexpr — это спецификатор, который позволяет вычислять выражения во время компиляции. Это полезно, когда вы хотите гарантировать, что результат функции или значения будет рассчитан на этапе компиляции, что может улучшить производительность программы.
✔️ constexpr применяется для функций и переменных, которые могут быть рассчитаны на этапе компиляции, что делает код более эффективным.
🔗 Почитать подробнее
Бесплатное IT-образование в 2024
Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления
Выбирайте нужное и подписывайтесь:
👩💻 Python: @PythonPortal
🖥 Базы Данных & SQL: @SQL
👩💻 Java: @Java_Iibrary
👩💻 С/С++: @Cpportal
📱 GitHub: @git_developer
🤓 Книги айти: @portalToIT
👩💻 Frontend: @FrontendPortal
⚙️ Backend: @BackendPortal
👩💻 C#: @KodBlog
👩💻 Golang: @juniorGolang
👩💻 PHP: @PHPortal
👩💻 Моб. разработка: @MobDev
👩💻 Разработка игр: @GameDevgx
👩💻 DevOps: @loose_code
🖥 Data Science: @DataSciencegx
🤔 Хакинг & ИБ: @cybersecinform
🐞 Тестирование: @QAPortal
📱 Маркетинг: @MarketingPortal
🖥 Дизайн: @PortalToDesign
➡️ Сохраняйте себе, чтобы не потерять
➡️ Использование библиотеки SML для работы с перечислениями в C++
SML — это библиотека для создания конечных автоматов с высокой производительностью и минимальной затратой на компиляцию. Она помогает моделировать сложные состояния и переходы.
🔗 Ссылочка на доку
➡️ Использование библиотеки Outcome для обработки ошибок в C++
Outcome — это библиотека для удобной работы с обработкой ошибок в C++. Она предоставляет гибкий механизм для возврата и обработки ошибок без использования исключений, что улучшает производительность и делает код более предсказуемым.• Outcome позволяет возвращать и обрабатывать значения ошибок с минимальными накладными расходами.
🔗 Ссылочка на доку
➡️ Использование библиотеки di для создания зависимостей в C++
di — это легковесная библиотека для управления зависимостями в C++. Она предоставляет простой способ внедрения зависимостей, что делает код более модульным и тестируемым.• di поддерживает автоматическое создание зависимостей и упрощает управление компонентами в сложных проектах.
🔗 Ссылочка на доку
➡️ Использование библиотеки EnTT для работы с системами сущностей (Entity-Component-System, ECS) в C++
EnTT — это мощная библиотека для создания игр и симуляций с использованием паттерна Entity-Component-System (ECS).
Она позволяет легко управлять большими наборами объектов (сущностей) и их компонентами, что делает её отличным выбором для разработки игровых приложений и других систем, где важна масштабируемость и производительность.• EnTT — отличный инструмент для разработчиков, создающих сложные игровые системы или симуляции с большим количеством взаимодействующих объектов.
🔗 Ссылочка на доку
➡️ Использование библиотеки cppcoro для работы с корутинами в C++
cppcoro — это библиотека, предоставляющая набор инструментов для работы с корутинами в C++, включая асинхронные операции, таймеры, семафоры и другие примитивы синхронизации. Это упрощает написание асинхронного кода с поддержкой корутин, обеспечивая высокую производительность и читаемость.• cppcoro — отличный выбор для создания высокопроизводительных асинхронных приложений с использованием корутин.
🔗 Ссылочка на доку
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
Лямбда-выражение с захватом по значению и спецификатором mutable работает с копией x. Изменение x внутри лямбды не влияет на оригинальную переменную x вне лямбды.
➡️ Crow — легковесный фреймворк для веб-приложений на C++
Crow — это минималистичный фреймворк для разработки веб-серверов на C++. Поддерживает маршрутизацию, работу с JSON и асинхронный ввод-вывод, что делает его идеальным для создания быстрых и лёгких API.• Простая маршрутизация для создания RESTful API.• Встроенная поддержка JSON через nlohmann/json.• Асинхронная обработка запросов для высокой производительности.
🔗 Ссылочка на доку
⚙️ std::forward
Функция std::forward из заголовка <utility> используется для реализации идеальной передачи (perfect forwarding) аргументов в шаблонных функциях. Она позволяет сохранить категорию значения (lvalue или rvalue) передаваемого аргумента, что особенно полезно при написании обобщённого кода.
Получите оффер Software Engineer всего за 3 дня! 🚀
Вендор и производитель IT-инфраструктуры YADRO приглашает Software Engineer на SPRINT OFFER.
Команда KVADRA OS ждёт кандидатов сразу на два направления: Linux-based (от уровня junior) и Android (уровня middle и senior).
В YADRO под брендом KVADRA ребята создают персональные устройства, а также разрабатывают собственную операционную систему kvadraOS, которая поддерживает облачное хранилище и включает множество компонентов собственной разработки — от системного ядра до приложений и сервисов.
🔵 Присоединившись к YADRO, вы станете частью большого инженерного сообщества и получите возможность влиять на продукт, работая в уникальной команде специалистов.
Читайте подробности на сайте, оставляйте заявку до 24 ноября и присоединяйтесь к команде KVADRA OS → по ссылке.
⚙️ std::visit
В C++17 введена функция std::visit из заголовка <variant>, которая позволяет применять вызываемый объект (функтор, лямбда или функциональный объект) к текущему значению std::variant. Это обеспечивает безопасную и удобную работу с вариантами, заменяя необходимость в явных проверках типа и приведениях.
👩💻 Задача по C++
Напишите функцию findMedian для нахождения медианы в отсортированном массиве целых чисел. Функция должна корректно работать как с массивами чётной длины, так и с нечётной, и возвращать медиану в виде числа с плавающей точкой.
Пример:
std::vector<int> arr1 = {1, 3, 3, 6, 7, 8, 9};
std::vector<int> arr2 = {1, 2, 3, 4, 5, 6, 8, 9};
std::cout << findMedian(arr1) << std::endl; // Вернёт 6
std::cout << findMedian(arr2) << std::endl; // Вернёт 4.5
⚙️ std::transform
В C++ функция std::transform из <algorithm> позволяет применить функцию к каждому элементу контейнера, создавая новый набор данных. Удобна для преобразования элементов на лету.
⚙️ std::all_of
В C++ функция std::all_of из <algorithm> проверяет, соответствуют ли все элементы заданному условию. Удобна для быстрой валидации содержимого контейнера.
⚙️ std::rename()
В C++ функция std::rename() из заголовка <cstdio> используется для переименования файла или перемещения его в новую директорию. Это стандартный способ работы с файлами на уровне ОС.
➡️ Использование библиотеки Glaze для сериализации данных в C++
Glaze — это мощная библиотека для сериализации объектов C++ в различные форматы, такие как JSON, с высокой производительностью. Она поддерживает статическую сериализацию, обеспечивая компактность и быстрое преобразование данных.• Glaze подходит для приложений, где важна производительность при работе с большими объемами данных и их передачей в различные форматы.
🔗 Ссылочка на доку
Стать сотрудником Яндекса быстрее и проще, чем кажется. Участвуйте в днях быстрого найма: решите тестовое, пройдите несколько секций собеседования и получите офер за несколько дней.
Ближайшее мероприятие:
• 9-11 ноября — для продуктовых и аналитиков данных, офер за 3 дня в команды Финтеха и Яндекс Практикума.
Зарегистрироваться
➡️ Использование библиотеки magic_enum для работы с перечислениями в C++
magic_enum — это современная библиотека для C++, которая предоставляет возможности рефлексии для перечислений (enum). Она позволяет легко преобразовывать значения перечислений в строки и обратно, а также получать список всех значений перечисления.• magic_enum упрощает работу с перечислениями, улучшая читаемость и безопасность кода.
🔗 Ссылочка на доку
14 ноября, YADRO С++ meetup, Москва и онлайн
Встречаемся очно или на трансляции — регистрируйтесь, чтобы забронировать место и получить ссылку на стрим на одной из популярных платформ.
В программе:
• Как сочетать объектный подход с современным программированием.
• Паттерны ООП, которые сделают проект гибким и легким в поддержке.
• Удобство интрузивных контейнеров.
• Что помогает нам в разработке 5G сетей.
• Инструменты библиотеки Boost.Intrusive.
• Дискуссия: эксперты из YADRO, Яндекса, Syntacore и Касперского обсудят, как протекает реализация стандартов: на сколько быстро внедряются фичи, стоит ли обратить внимание на подходы других языков и становится ли продукт безопасней, если написан на новых стандартах?
Офлайн-участники смогут увидеть «железо» для ЦОД и телеком-операторов, код для которого пишут С++ разработчики YADRO, пообщаться с экспертами на мини-стендах, поучаствовать в технических интерактивах и получить призы после митапа.
Участие бесплатное, регистрация обязательна.
До встречи!
➡️ Использование библиотеки async_simple для работы с асинхронностью в C++
async_simple — это новая библиотека, которая предоставляет простой и эффективный способ работы с асинхронными операциями в C++. Она упрощает управление асинхронными задачами, улучшая читабельность и производительность кода.• async_simple идеально подходит для тех, кто хочет писать асинхронный код без сложных шаблонов и лишних зависимостей.
🔗 Ссылочка на доку
➡️ Использование std::latch для синхронизации потоковstd::latch — это примитив синхронизации, который позволяет одному или нескольким потокам ожидать, пока другие потоки не завершат выполнение. В отличие от std::barrier, он не перезагружается после достижения условия синхронизации, что делает его полезным для одноразовой координации.std::latch полезен в ситуациях, когда необходимо, чтобы один поток ждал завершения других потоков.