Библиотека C/C++ разработчика | cpp, boost, qt
33.9K subscribers
2.16K photos
67 videos
16 files
4.5K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17

#WXSSA
Download Telegram
📌 Зачем дата-сайентисту матанализ?

Основная компетенция специалиста по Data Science – способность анализировать и интерпретировать данные, а математика является фундаментом для начала работы.

В карточках мы разбираем основные разделы математики, с которых стоит начать изучение специалисту по анализу данных.

Хотите подготовиться к офферу или подтянуть знания? Оставляйте заявку на наш курс по математике для Data Science 💙

P.S. Только до 31 мая на курс (и вообще на все программы Академии) действует СКИДКА 40%

А как у вас дела с высшей математикой?
❤️ — Помню всё
🔥 — Знаю основы
🌚 — Ничего не знаю

🏃‍♀️ Proglib Academy
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4😁4👍3🥱3🥰1
🐸 Подборка вакансий для C++-разработчиков за неделю

Unreal engine/С++ developer (gamedev) —Удалёнка

C Developer (VoIP / Telecommunications) — Удалёнка

Разработчик C++ (Middle) —Офис (Москва)

Архитектор ПО (C++ разработчик) — Команда разработки EPC (MME, S-GW, P-GW)

C++ red team developer — от 230 000 и до 350 000 ₽ Гибрид (Санкт-Петербург)

Senior/Middle C/C++ Developer (System Programming / Embedded) — от 200 000 ₽ Удалёнка

Ведущий разработчик С++ — от 250 000 и до 350 000 ₽ Офис/гибрид (Москва)

📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#вакансии
😁21
‼️ Задача на выходные: lock_guard

Проведи ревью кода и найди проблему (если она есть😉).

#include <mutex>
#include <thread>
#include <vector>
#include <iostream>

std::mutex mtx;
std::vector<int> data;

void producer() {
for (int i = 0; i < 100; ++i) {
std::lock_guard<std::mutex> lock(mtx);
data.push_back(i);
}
}

void consumer() {
while (true) {
std::lock_guard<std::mutex> lock(mtx);
if (data.empty()) {
// Ждём данные...
std::this_thread::sleep_for(
std::chrono::milliseconds(10));
continue;
}
std::cout << data.back() << "\n";
data.pop_back();
}
}


Вопрос: что не так с consumer()? Почему lock_guard здесь — плохой выбор и как это исправить?


📍Навигация:
ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2🥱21
📰 Свеженькое из мира C++

Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.

😎 Интересное:

7 игр сделанных на Unigine Engine — на Unigine Engine всё же пишут игры
Хочешь работать на зарубежную компанию из России? — советы по поиску работы за рубежом
Почему std::this_thread::sleep_for не гарантирует точную паузу? — разбираемся почему sleep_for(100ms) это гарантия минимального времени ожидания, но не точного


📙 Ranges:

Вложенные диапазоны: views::join и views::join_with
Ranges: другие полезные адаптеры


🔹📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#свежак
👍1
До 31 мая можно забрать любой курс Proglib Academy со скидкой 40%

Если давно хотели прокачаться в Python, ML, алгоритмах или AI-агентах, сейчас самое время выбрать программу и начать обучение по сниженной цене.

🎁 Разработка AI-агентов от 49.000 ₽ (вместо 69.000 ₽)

Практический курс по разработке AI-агентов для автоматизации задач, работы и собственных проектов

🎁 Курс AgentOps129.000 ₽ (вместо 149.000 ₽)

Для разработчиков и LLM-инженеров, которые хотят внедрять AI-логику в бэкенд и сохранять стабильность сервиса.

🎁 Математика для разработки AI-моделей 23.990 ₽ (вместо 31.990 ₽)

Практическая база по математике для анализа данных, ML и дальнейшего развития в AI.

🎁 Математика для Data Scienceот 29.990 ₽ (вместо 39.990 ₽)

Курс для тех, кто хочет решать задачи, которые дают на собеседованиях на позицию дата-сайентиста в бигтехе.

🎁 ML для старта в Data Science28.990 ₽ (вместо 38.990 ₽)

Разберётесь в машинном обучении: от базовых понятий и линейных моделей до ансамблей, бустинга и рекомендательных систем.

🎁 Основы IT для непрограммистов16.990 ₽ (вместо 28.990 ₽)

Курс для IT-рекрутеров, маркетологов, проджектов, продактов и всех, кто работает с IT, но не пишет код.

🎁 Архитектуры и шаблоны проектирования27.990 ₽ (вместо 37.900 ₽)

Освоите основные паттерны проектирования и прокачаете навыки архитектора программного обеспечения.

🎁 Специалист по ИИ89.000 ₽ (вместо 113.900 ₽)

Курс для тех, кто хочет получить профессию в сфере ИИ, собрать портфолио из 5 проектов и научиться разрабатывать сложных AI-агентов.

🎁 Алгоритмы и структуры данных 33.990 ₽ (вместо 57.990 ₽)

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

🎁 Программирование на языке Python27.990 ₽ (вместо 47.390 ₽)

Освоите Python на практике: без сухой теории, с пошаговой прокачкой навыков и итоговым проектом в портфолио.

🙌 Выбирайте курс по ссылке, оставляйте заявку, и менеджер поможет подобрать программу под ваши цели — https://clc.to/GHcYlg
2😁1
✈️ Алгоритмы диапазонов: Алгоритмы поиска

Продолжаем разбираться в диапазонах 🙂

std::ranges::*
— это переработанные алгоритмы из <algorithm>. Они принимают диапазоны целиком (не нужно писать begin/end) и поддерживают проекции.


👁 ranges::find / ranges::find_if — найти элемент

std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};

// Найти первый элемент, равный 4
auto it = std::ranges::find(v, 4);
if (it != v.end()) {
std::cout << "Найдено: " << *it << "\n"; // 4
}

// Найти первый элемент, удовлетворяющий условию
auto it2 = std::ranges::find_if(v, [](int x) { return x > 5; });
// указывает на 9


❗️ Возвращают итератор на найденный элемент или end(), если ничего не найдено. В отличие от классического std::find, диапазонная версия принимает контейнер целиком — никаких v.begin(), v.end().


↗️ ranges::all_of / any_of / none_of — проверки на весь диапазон

std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};

bool all_positive = std::ranges::all_of(v, [](int x) { return x > 0; });
// true — все элементы положительные

bool any_gt_8 = std::ranges::any_of(v, [](int x) { return x > 8; });
// true — есть 9

bool none_neg = std::ranges::none_of(v, [](int x) { return x < 0; });
// true — отрицательных нет


Три алгоритма, одна идея: проверить предикат на всём диапазоне. Ленивые — all_of остановится на первом false, any_of — на первом true.


🧋 ranges::count / ranges::count_if — подсчёт

auto count_ones = std::ranges::count(v, 1);       // 2
auto count_big = std::ranges::count_if(v, [](int x) { return x > 5; }); // 2 (9, 6)


count — точное совпадение, count_if — по предикату. Возвращают std::ranges::range_difference_t, а не int — на практике это обычно ptrdiff_t.


🍪 ranges::minmax_element — минимум и максимум за один проход

auto [min_it, max_it] = std::ranges::minmax_element(v);
std::cout << *min_it << " " << *max_it; // 1 9


Возвращает пару итераторов {min, max}. Один проход вместо двух отдельных вызовов min_element + max_element. Structured bindings (auto [min_it, max_it]) делают код чище.

❗️ Также доступны ranges::min_element и ranges::max_element по отдельности. А ranges::min / ranges::max возвращают копию значения (не итератор и не ссылку) — учитывайте это для тяжёлых объектов.


🍕 Проекции — суперсила ranges-алгоритмов

struct Person {
std::string name;
int age;
};

std::vector<Person> people = {{"Алиса", 30}, {"Борис", 25}, {"Вера", 35}};

// Найти человека по имени — без лямбды!
auto it = std::ranges::find(people, "Борис", &Person::name);
// it->age == 25

// Самый молодой
auto youngest = std::ranges::min_element(people, {}, &Person::age);
// youngest->name == "Борис"

// Все ли совершеннолетние?
bool all_adults = std::ranges::all_of(people, [](int a) { return a >= 18; }, &Person::age);


Проекция — третий (или четвёртый) аргумент. Она «извлекает» нужное поле перед сравнением. Больше не нужно писать громоздкие лямбды вида [](const Person& p) { return p.age; } — достаточно &Person::age.


❗️ Обратите внимание: в find мы передаём std::string{"Борис"}, а не строковый литерал. Литерал "Борис" имеет тип const char*, и хотя неявное преобразование в std::string здесь сработает, явная конструкция делает намерение очевидным.


🩹 Комбинируем с views

std::map<std::string, std::vector<int>> data = {
{"alpha", {1, 2, 3}},
{"beta", {4, 5}},
{"gamma", {6, 7, 8, 9}},
};

// Сколько значений больше 5 во всех векторах?
auto all_values = data | views::values | views::join;
auto count = std::ranges::count_if(all_values, [](int x) { return x > 5; });
// 4 (6, 7, 8, 9)


views::values извлекает вторые элементы пар (векторы), а views::join разворачивает один уровень вложенности — склеивает все векторы в единый плоский диапазон. Результат можно передать в любой ranges-алгоритм.


📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥72
🤝 Как уволиться грамотно: 8 шагов, чтобы закрыть все вопросы

Если мысль «надо уходить» появляется каждое утро, скорее всего, пора. Но между «хочу уйти» и «ушел грамотно» целая пропасть. Разбираем 8 шагов, которые помогут уйти без скандала, с рекомендациями и чистой совестью.

👉 Подробнее...

📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#буст
😁3💯31