C++ Эволюция
2.72K subscribers
296 photos
2 videos
106 links
Обучающий канал по C++
Download Telegram
⚙️ 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 👩‍💻
⚙️ std::lower_bound и std::upper_bound

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

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

В C++ класс std::priority_queue из заголовка <queue> представляет собой контейнер с приоритетной очередью. Элементы извлекаются в порядке приоритета — по умолчанию, от большего к меньшему.

C++ Learning 👩‍💻
Вопрос на собеседовании

Что такое перемещение (move semantics) в C++11, как оно работает, и зачем нужен конструктор перемещения?

Ответ ⬇️
Перемещение — это оптимизация, которая позволяет передавать ресурсы (например, память или файлы) из одного объекта в другой без копирования, с помощью конструктора перемещения или оператора перемещения. Это достигается использованием std::move, который превращает объект в rvalue-ссылку, указывающую на временный объект. Конструктор перемещения предотвращает дорогостоящие копирования, делая код более производительным.

Пример использования ⚙️
#include <iostream>
#include <vector>
#include <utility> // Для std::move

class MyVector {
private:
int* data;
size_t size;

public:
// Конструктор
MyVector(size_t n) : size(n), data(new int[n]) {
std::cout << "Конструктор\n";
}

// Конструктор перемещения
MyVector(MyVector&& other) noexcept : size(other.size), data(other.data) {
other.data = nullptr; // Передаем ресурсы и обнуляем указатель у источника
other.size = 0;
std::cout << "Конструктор перемещения\n";
}

// Деструктор
~MyVector() {
delete[] data;
std::cout << "Деструктор\n";
}
};

int main() {
MyVector vec1(10); // Создаем объект
MyVector vec2 = std::move(vec1); // Используем конструктор перемещения

// vec1 больше не владеет ресурсами
return 0;
}

// Результат выполнения:
// Конструктор
// Конструктор перемещения
// Деструктор (vec1, ресурсы уже перенесены)
// Деструктор (vec2)


Если вдруг не поняли, можешь почитать подробное объяснение здесь.

C++ Learning 👩‍💻