C++ Эволюция
2.72K subscribers
296 photos
2 videos
106 links
Обучающий канал по C++
Download Telegram
Вопрос на собеседовании

Что такое rvalue-ссылки в C++ и зачем они нужны?

Ответ ⬇️
Rvalue-ссылки (ссылки на временные объекты) позволяют захватывать и модифицировать временные объекты, избегая ненужного копирования данных. Они обозначаются как T&&. Основное применение rvalue-ссылок — это "перемещение" (move semantics), которое помогает оптимизировать работу с ресурсами. Вместо создания копии и переноса данных, можно использовать rvalue-ссылку и «переместить» содержимое, например, из одного контейнера в другой, обнулив исходный объект.

Пример использования ⚙️
#include <iostream>
#include <vector>

class MyClass {
public:
std::vector<int> data;

MyClass(std::vector<int> d) : data(std::move(d)) {} // перемещающий конструктор

MyClass(MyClass&& other) noexcept : data(std::move(other.data)) {
other.data.clear();
}
};

int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
MyClass obj1(std::move(numbers)); // перемещение данных из numbers в obj1

MyClass obj2(std::move(obj1)); // перемещение из obj1 в obj2
std::cout << "Размер obj1 после перемещения: " << obj1.data.size() << std::endl; // Размер obj1 после перемещения: 0
}


C++ Learning 👩‍💻
⚙️ std::all_of

В C++ функция std::all_of из <algorithm> проверяет, соответствуют ли все элементы заданному условию. Удобна для быстрой валидации содержимого контейнера.

C++ Learning 👩‍💻
➡️ GSL: Библиотека численных методов для C/C++ разработчиков

GSL – бесплатная библиотека для C и C++, включающая комплексные числа, матрицы, полиномы и анализ. Она проста в использовании, безопасна для многопоточности и не имеет зависимостей.

Поддержка множества математических операций.
Потокобезопасность и отсутствие зависимостей для надёжной интеграции в проекты.

🔗 Ссылочка на доку

C++ Learning 👩‍💻
⚙️ std::transform

В C++ функция std::transform из <algorithm> позволяет применить функцию к каждому элементу контейнера, создавая новый набор данных. Удобна для преобразования элементов на лету.

C++ Learning 👩‍💻
👩‍💻 Задача по C++: Подсчёт гласных и согласных в строке

Напишите функцию на C++, которая принимает строку и подсчитывает количество гласных и согласных букв. Функция должна игнорировать пробелы, цифры и другие символы, не являющиеся буквами. В основной функции main() вызовите эту функцию и выведите результат в консоль.

Пример:

"Hello, World!"

Гласные: 3
Согласные: 7


Решение задачи на картинке

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

Пояснение ⬇️
Попытка изменить значение const int x через const_cast приведет к неопределённому поведению, но большинство компиляторов оставляют значение x неизменным, выводя 10.

C++ Learning
👩‍💻
⚙️ std::for_each

В C++ функция std::for_each из <algorithm> позволяет применить функцию к каждому элементу контейнера, что удобно для выполнения операций над всеми элементами.

C++ Learning 👩‍💻
⚙️ std::async

В C++ функция std::async из заголовка <future> позволяет запускать асинхронные задачи, возвращая объект std::future, который можно использовать для получения результата выполнения задачи. Это упрощает реализацию параллельных вычислений и улучшает производительность программ.

C++ Learning 👩‍💻
⚙️ std::transform_reduce

Функция std::transform_reduce из заголовка <numeric> объединяет возможности std::transform и std::accumulate, позволяя сначала применить операцию к каждому элементу, а затем свести их к одному значению. Это полезно для производительного параллельного вычисления сумм, произведений и других операций.

C++ Learning 👩‍💻
✍️ Простые советы для тех, кто столкнулся с высшей математикой:

1) Помните, что математика — это не какой-то набор формул. Это язык, который описывает мир вокруг нас.

2) Используйте знания в повседневной жизни.

3) Читайте канал преподавателя по высшей математике - он понятным языком объяснит все сложные вещи.

Вас ждут бесплатные практикумы на различные темы, готовые шпаргалки уроков и активное комьюнити 🔥

Приятный бонус - вы всегда можете обратиться за помощью с учёбой или решением задач.

Не теряйте 👉
⚙️ std::visit

В C++17 введена функция std::visit из заголовка <variant>, которая позволяет применять вызываемый объект (функтор, лямбда или функциональный объект) к текущему значению std::variant. Это обеспечивает безопасную и удобную работу с вариантами, заменяя необходимость в явных проверках типа и приведениях.

C++ Learning 👩‍💻
➡️ Boost.JSON — библиотека для работы с JSON в C++

Boost.JSON, предназначена для эффективной работы с JSON-данными в C++. Она обеспечивает высокую производительность и простоту интеграции в существующие проекты.

Высокая производительность: Оптимизированный парсер и сериализатор для быстрого преобразования JSON-данных.
Совместимость: Поддержка стандартных контейнеров C++ и интеграция с другими библиотеками Boost.
Гибкость: Возможность работы с произвольными JSON-структурами и типами данных.
Безопасность: Обработка ошибок и защита от переполнения буфера при работе с недоверенными данными.


🔗 Ссылочка на доку

C++ Learning 👩‍💻
➡️ RaftLib — современная библиотека для параллельной обработки данных в C++

RaftLib — это библиотека с открытым исходным кодом, упрощающая разработку высокопроизводительных параллельных приложений на C++. Она позволяет создавать масштабируемые системы обработки данных, используя концепцию потоков и конвейеров.

Интуитивный интерфейс: Напоминает стандартные потоки C++, облегчая освоение.
Автоматическая параллелизация: Управляет потоками и распределением задач для оптимальной производительности.
Гибкость и масштабируемость: Эффективна как на локальных системах, так и в распределённых средах.

🔗 Ссылочка на доку

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

Пояснение ⬇️
Для func(10) вызывается специализированная версия функции для int. Для func(10.5) вызывается шаблонная версия, так как точного соответствия нет.

C++ Learning
👩‍💻
⚙️ std::forward

Функция std::forward из заголовка <utility> используется для реализации идеальной передачи (perfect forwarding) аргументов в шаблонных функциях. Она позволяет сохранить категорию значения (lvalue или rvalue) передаваемого аргумента, что особенно полезно при написании обобщённого кода.

C++ Learning 👩‍💻
➡️ Crow — легковесный фреймворк для веб-приложений на C++

Crow — это минималистичный фреймворк для разработки веб-серверов на C++. Поддерживает маршрутизацию, работу с JSON и асинхронный ввод-вывод, что делает его идеальным для создания быстрых и лёгких API.

Простая маршрутизация для создания RESTful API.
Встроенная поддержка JSON через nlohmann/json.
Асинхронная обработка запросов для высокой производительности.

🔗 Ссылочка на доку

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

Пояснение ⬇️
Лямбда-выражение с захватом по значению и спецификатором mutable работает с копией x. Изменение x внутри лямбды не влияет на оригинальную переменную x вне лямбды.

C++ Learning
👩‍💻
⚙️ std::tie

Функция std::tie из заголовка <tuple> используется для создания кортежа ссылок, что позволяет удобно распаковывать значения из функций или объектов. Это упрощает многозначные возвраты и код чтения данных.

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

Пояснение ⬇️

ptr1 и ptr2 указывают на один объект через std::shared_ptr. Изменение через ptr1 видно через ptr2, поэтому вывод 15. У unique_ptr объект меняется на 30.


C++ Learning 👩‍💻
⚙️ std::unique

Функция std::unique из заголовка <algorithm> удаляет последовательные дубликаты в отсортированном диапазоне, оставляя уникальные элементы. Это полезно для очистки списка от повторяющихся значений.

C++ Learning 👩‍💻