Напишите функцию на C++, которая принимает строку и подсчитывает количество гласных и согласных букв. Функция должна игнорировать пробелы, цифры и другие символы, не являющиеся буквами. В основной функции
main()
вызовите эту функцию и выведите результат в консоль.Пример:
"Hello, World!"
Гласные: 3
Согласные: 7
Решение задачи на картинке
Please open Telegram to view this post
VIEW IN TELEGRAM
Напишите функцию
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
Решение задачи на картинке
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция
std::transform_reduce
из заголовка <numeric>
объединяет возможности std::transform
и std::accumulate
, позволяя сначала применить операцию к каждому элементу, а затем свести их к одному значению. Это полезно для производительного параллельного вычисления сумм, произведений и других операций.Please open Telegram to view this post
VIEW IN TELEGRAM
В C++17 введена функция
std::visit
из заголовка <variant>
, которая позволяет применять вызываемый объект (функтор, лямбда или функциональный объект) к текущему значению std::variant
. Это обеспечивает безопасную и удобную работу с вариантами, заменяя необходимость в явных проверках типа и приведениях.Please open Telegram to view this post
VIEW IN TELEGRAM
RaftLib — это библиотека с открытым исходным кодом, упрощающая разработку высокопроизводительных параллельных приложений на C++. Она позволяет создавать масштабируемые системы обработки данных, используя концепцию потоков и конвейеров.
•
Интуитивный интерфейс: Напоминает стандартные потоки C++, облегчая освоение.•
Автоматическая параллелизация: Управляет потоками и распределением задач для оптимальной производительности.•
Гибкость и масштабируемость: Эффективна как на локальных системах, так и в распределённых средах.Please open Telegram to view this post
VIEW IN TELEGRAM
Пояснение
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция
std::forward
из заголовка <utility>
используется для реализации идеальной передачи (perfect forwarding) аргументов в шаблонных функциях. Она позволяет сохранить категорию значения (lvalue или rvalue) передаваемого аргумента, что особенно полезно при написании обобщённого кода.Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое
Ответ⬇️
std::move — это стандартная функция в C++, которая позволяет указать, что объект может быть "перемещён", т.е. его ресурсы могут быть переданы другому объекту, а не скопированы. Перемещение особенно полезно для объектов, которые управляют большими ресурсами, например, динамической памятью. В результате std::move позволяет избежать затратных операций копирования и повысить производительность, передавая ресурсы, а не создавая их дубликаты.
Пример использования⚙️
#вопросы_с_собеседований
std::move
в C++ и как он используется?Ответ
Пример использования
#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;
}
#вопросы_с_собеседований
Please open Telegram to view this post
VIEW IN TELEGRAM
Crow — это минималистичный фреймворк для разработки веб-серверов на C++. Поддерживает маршрутизацию, работу с JSON и асинхронный ввод-вывод, что делает его идеальным для создания быстрых и лёгких API.
•
Простая маршрутизация для создания RESTful API.•
Встроенная поддержка JSON через nlohmann/json.•
Асинхронная обработка запросов для высокой производительности.Please open Telegram to view this post
VIEW IN TELEGRAM
Пояснение
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция
std::tie
из заголовка <tuple>
используется для создания кортежа ссылок, что позволяет удобно распаковывать значения из функций или объектов. Это упрощает многозначные возвраты и код чтения данных.Please open Telegram to view this post
VIEW IN TELEGRAM
Напишите функцию, которая принимает строку и проверяет, является ли она палиндромом. Функция должна игнорировать пробелы, знаки препинания и регистр.
Пример:
std::cout << isPalindrome("A man, a plan, a canal, Panama") << std::endl; // Ожидаемый результат: true
std::cout << isPalindrome("Hello, World!") << std::endl; // Ожидаемый результат: false
Решение задачи на картинке
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция
std::unique
из заголовка <algorithm>
удаляет последовательные дубликаты в отсортированном диапазоне, оставляя уникальные элементы. Это полезно для очистки списка от повторяющихся значений.Please open Telegram to view this post
VIEW IN TELEGRAM
Функции
std::lower_bound
и std::upper_bound
из заголовка <algorithm>
используются для поиска границ диапазона элементов, равных заданному значению, в отсортированном контейнере. Это основа для эффективного бинарного поиска.Please open Telegram to view this post
VIEW IN TELEGRAM
В C++ класс
std::priority_queue
из заголовка <queue>
представляет собой контейнер с приоритетной очередью. Элементы извлекаются в порядке приоритета — по умолчанию, от большего к меньшему.Please open Telegram to view this post
VIEW IN TELEGRAM
Класс
std::set
из заголовка <set>
представляет собой контейнер, хранящий уникальные элементы в отсортированном порядке. Это удобно для работы с множествами или быстрого поиска.Please open Telegram to view this post
VIEW IN TELEGRAM
Напишите функцию, которая принимает массив целых чисел и удаляет из него все дубликаты. Возвращаемый массив должен содержать только уникальные значения, сохраняя исходный порядок их появления.
Пример:
std::vector<int> numbers = {1, 2, 2, 3, 4, 3, 5};
std::vector<int> result = removeDuplicates(numbers);
for (int num : result) {
std::cout << num << " ";
}
// Ожидаемый вывод: 1 2 3 4 5
Решение задачи на картинке
Please open Telegram to view this post
VIEW IN TELEGRAM
В C++ функция
std::reverse
из заголовка <algorithm>
позволяет изменить порядок элементов в контейнере на обратный. Это полезно для работы с массивами, векторами и другими последовательностями.Please open Telegram to view this post
VIEW IN TELEGRAM
#вопросы_с_собеседований
Что такое perfect forwarding в C++, как оно работает и зачем оно нужно?
Ответ⬇️
Perfect forwarding — это техника передачи аргументов в функции или конструкторы так, чтобы сохранить их исходные квалификаторы (например, lvalue, rvalue). Она достигается с помощью универсальных ссылок (T&&) и функции std::forward. Perfect forwarding используется для передачи аргументов в шаблонных функциях без лишних копирований.
Пример использования⚙️
Что такое perfect forwarding в C++, как оно работает и зачем оно нужно?
Ответ
Пример использования
#include <iostream>
#include <utility>
void process(int& x) {
std::cout << "Lvalue: " << x << "\n";
}
void process(int&& x) {
std::cout << "Rvalue: " << x << "\n";
}
template <typename T>
void forwarder(T&& arg) {
process(std::forward<T>(arg));
}
int main() {
int a = 42;
forwarder(a); // Передаем lvalue
forwarder(100); // Передаем rvalue
return 0;
}
Please open Telegram to view this post
VIEW IN TELEGRAM