⚙️ std::reverse
В C++ функция
C++ Learning 👩💻
В C++ функция
std::reverse из заголовка <algorithm> позволяет изменить порядок элементов в контейнере на обратный. Это полезно для работы с массивами, векторами и другими последовательностями.C++ Learning 👩💻
❓ Вопрос на собеседовании
Что такое perfect forwarding в C++, как оно работает и зачем оно нужно?
Ответ ⬇️
Perfect forwarding — это техника передачи аргументов в функции или конструкторы так, чтобы сохранить их исходные квалификаторы (например, lvalue, rvalue). Она достигается с помощью универсальных ссылок (T&&) и функции std::forward. Perfect forwarding используется для передачи аргументов в шаблонных функциях без лишних копирований.
Пример использования ⚙️
C++ Learning 👩💻
Что такое 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;
}
C++ Learning 👩💻
Abseil
Abseil — это набор библиотек общего назначения для C++, открытый компанией Google. Он предназначен для расширения возможностей стандартной библиотеки C++ и включает в себя хорошо протестированный код, используемый во внутренних проектах Google.
Стоит отметить, что Abseil не является заменой стандартной библиотеки C++. Google скорее делится своим полезным и проверенным кодом с сообществом разработчиков.
C++ Learning 👩💻
Abseil — это набор библиотек общего назначения для C++, открытый компанией Google. Он предназначен для расширения возможностей стандартной библиотеки C++ и включает в себя хорошо протестированный код, используемый во внутренних проектах Google.
Стоит отметить, что Abseil не является заменой стандартной библиотеки C++. Google скорее делится своим полезным и проверенным кодом с сообществом разработчиков.
C++ Learning 👩💻
❓ Вопрос на собеседовании
Что такое шаблонный метод
Ответ ⬇️
std::enable_if — это шаблонный механизм SFINAE (Substitution Failure Is Not An Error), позволяющий включать или отключать функции или классы на этапе компиляции в зависимости от выполнения условий. Это полезно для создания перегрузок шаблонов или ограничения их использования для определённых типов.
Пример использования ⚙️
C++ Learning 👩💻
Что такое шаблонный метод
std::enable_if в C++, как он работает, и в каких случаях его полезно использовать?Ответ ⬇️
Пример использования ⚙️
#include <iostream>
#include <type_traits>
// Шаблон для целых чисел
template <typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
printType(T value) {
std::cout << "Целое число: " << value << "\n";
}
// Шаблон для чисел с плавающей точкой
template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
printType(T value) {
std::cout << "Число с плавающей точкой: " << value << "\n";
}
int main() {
printType(42); // Целое число: 42
printType(3.14); // Число с плавающей точкой: 3.14
// printType("Test"); // Ошибка компиляции: шаблон не подходит
}
C++ Learning 👩💻
👩💻 Задача по C++: Удаление дубликатов из вектора с сохранением порядка
Напишите функцию, которая принимает
Пример:
Решение задачи на картинке ☝
C++ Learning 👩💻
Напишите функцию, которая принимает
std::vector и возвращает новый std::vector, содержащий только уникальные элементы, сохраняя их порядок появления.Пример:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 2, 3, 4, 3, 5, 1};
auto result = removeDuplicates(numbers);
for (int num : result) {
std::cout << num << " ";
}
// Ожидаемый результат: 1 2 3 4 5
return 0;
}
Решение задачи на картинке ☝
C++ Learning 👩💻
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
C++ Learning 👩💻
Пояснение ⬇️
Метод show в Base объявлен как виртуальный, поэтому вызов obj->show() через указатель Base* вызывает переопределённую версию Derived show. Однако метод display не виртуальный, поэтому вызов obj->display() вызывает версию из Base. Код компилируется и работает корректно.
C++ Learning 👩💻
⚙️ std::partial_sort
В C++ функция
C++ Learning 👩💻
В C++ функция
std::partial_sort из заголовка <algorithm> сортирует только часть контейнера, оставляя элементы до заданной позиции отсортированными, а остальные — в неопределённом порядке. Это эффективно, если нужно найти несколько наименьших или наибольших элементов.C++ Learning 👩💻
❓ Вопрос на собеседовании
Что такое
Ответ ⬇️
Метод emplace добавляет новый элемент в контейнер, создавая его непосредственно на месте, вместо создания временного объекта и его копирования (как в случае с push_back). Это повышает производительность, особенно при добавлении сложных объектов. Метод emplace вызывает конструктор объекта с переданными аргументами прямо в памяти контейнера.
Пример использования ⚙️
C++ Learning 👩💻
Что такое
emplace в C++ и чем оно отличается от push_back при работе с контейнерами STL?Ответ ⬇️
Пример использования ⚙️
#include <iostream>
#include <vector>
#include <string>
class MyClass {
public:
MyClass(const std::string& name, int value) : name(name), value(value) {
std::cout << "Создан объект: " << name << " со значением " << value << "\n";
}
private:
std::string name;
int value;
};
int main() {
std::vector<MyClass> vec;
// Используем push_back
vec.push_back(MyClass("Object1", 10)); // Создаётся временный объект
// Используем emplace
vec.emplace_back("Object2", 20); // Объект создаётся сразу в контейнере
return 0;
}
C++ Learning 👩💻