🔄 std::transform: функциональный стиль в C++
Преобразует диапазон элемент за элементом
Особенности:
— Применять лямбды к контейнерам
— Копировать с изменением
— Комбинировать два диапазона
⌨️ Если пишете цикл для каждого элемента — почти всегда можно заменить на std::transform.
Преобразует диапазон элемент за элементом
std::vector<int> a = {1,2,3};
std::vector<int> b(3);
std::transform(a.begin(), a.end(), b.begin(), [](int x){ return x * 2; });Особенности:
— Применять лямбды к контейнерам
— Копировать с изменением
— Комбинировать два диапазона
std::transform(a.begin(), a.end(), c.begin(), std::back_inserter(out), std::plus<>{});Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Как сделать очередь с минимальными элементами наверху?
Anonymous Quiz
20%
std::priority_queue<int, vector<int>, greater<int>>
60%
std::priority_queue<int, less<int>>
20%
Никак
👍4
👍4
const int x = 10;
auto a = x;
auto& b = x;
Что здесь происходит?
a — копия, const отброшен
b — ссылка на const int
💡 auto отбрасывает const и ссылку, если они не указаны явно
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
std::string a = "hello";
std::string b = std::move(a);
Многие думают, что a очищается. Это не совсем так...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
В каком состоянии a после std::move?
Anonymous Quiz
29%
Всегда пустая строка
57%
В неопределённом состоянии
14%
Валидная, но неопределённого значения
0%
Равна "hello"
👍4
void f() {
std::lock_guard<std::mutex> g(m);
throw std::runtime_error("error");
}Please open Telegram to view this post
VIEW IN TELEGRAM
Что произойдёт с mutex?
Anonymous Quiz
20%
Он останется заблокированным
60%
Будет разблокирован
0%
Зависит от компилятора
20%
UB
👍4
struct Base {
~Base() = default;
};
struct Derived : Base {
~Derived() { std::cout << "dtor\n"; }
};
Base* b = new Derived;
delete b;Please open Telegram to view this post
VIEW IN TELEGRAM
Что произойдёт?
Anonymous Quiz
33%
Вызовется Derived::~Derived
0%
Вызовется Base::~Base
67%
UB
0%
Вызовется Derived::~Derived, потом Base::~Base
👍4
std::vector<int> v = {1,2,3};
auto it = v.begin();
v.push_back(4);Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Что с it после push_back?
Anonymous Quiz
17%
Всегда валиден
67%
Может стать невалидным
0%
Всегда инвалидируется
17%
Зависит от размера элемента
👍4
CRTP (Curiously Recurring Template Pattern) — идиома проектирования, при которой шаблон класса принимает производный класс в качестве параметра шаблона
template<typename D>
struct Base
{
void call() { static_cast<D*>(this)->impl(); }
};
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Главное преимущество CRTP?
Anonymous Quiz
17%
Проще читать код
67%
Нет виртуальной таблицы
17%
Работает только с шаблонами
0%
Поддерживает RTTI
👍4
int x = 10;
auto f() { return (x); }
Please open Telegram to view this post
VIEW IN TELEGRAM
std::string_view f() {
return std::string("hello");
}Please open Telegram to view this post
VIEW IN TELEGRAM
Что здесь не так?
Anonymous Quiz
17%
Всё корректно
17%
Утечка памяти
33%
Висячая ссылка
33%
Ошибка компиляции
👍4
std::unique_ptr и move
std::unique_ptr<int> a = std::make_unique<int>(5);
auto b = a;
👍4