🧩 std::rotate_copy — зачем нужна копия, если есть rotate?
🔍 Под капотом:
Никакой магии. Никаких swap. Просто два последовательных копирования.
⚡ Сложность: O(n) с одним проходом данных, без дополнительной памяти (кроме выходного диапазона).
💡 Когда это важно:
⚠️ Диапазоны [first, last) и [result, ...) не должны перекрываться — иначе поведение не определено. В отличие от
❗️
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
std::rotate_copy существует не для удобства — он закрывает конкретный случай, когда мутация исходника недопустима, но выделять промежуточный буфер вручную неудобно.std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dst(src.size());
std::rotate_copy(src.begin(), src.begin() + 2, src.end(), dst.begin());
// src: {1, 2, 3, 4, 5} — не тронут
// dst: {3, 4, 5, 1, 2}🔍 Под капотом:
rotate_copy — это ровно два вызова std::copy:auto out = std::copy(middle, last, result); // [middle, last) первыми
std::copy(first, middle, out); // [first, middle) следом
Никакой магии. Никаких swap. Просто два последовательных копирования.
⚡ Сложность: O(n) с одним проходом данных, без дополнительной памяти (кроме выходного диапазона).
💡 Когда это важно:
// Параллельная обработка: исходник читается несколькими потоками
std::rotate_copy(src.begin(), pivot, src.end(),
std::back_inserter(result));
⚠️ Диапазоны [first, last) и [result, ...) не должны перекрываться — иначе поведение не определено. В отличие от
std::rotate, который работает in-place и перекрытий нет по определению.rotate_copy — частный случай общего принципа STL: алгоритмы с суффиксом _copy не мутируют исходник и пишут в отдельный output iterator.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
В геймдеве можно всё 😆
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#развлекалово
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#развлекалово
😁23💯3
👩💻 #include хотят переименовать в #please
Комитет ISO пришёл к выводу, что вежливое обращение к компилятору снижает количество ошибок компиляции на 12%.
❗️ Компилятор тоже заслуживает уважения.
Попались? С первым апреля! 😁
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#развлекалово
Комитет ISO пришёл к выводу, что вежливое обращение к компилятору снижает количество ошибок компиляции на 12%.
#please <iostream>
#please <vector>
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#развлекалово
Please open Telegram to view this post
VIEW IN TELEGRAM
😁38❤🔥2😢2❤1
«Если ты думаешь, что циклы — это нормально, ты просто ещё не видел Ranges»
— Каждый разработчик C++20, примерно через неделю после знакомства с библиотекой
Добро пожаловать в мир
C++ Ranges — одного из самых мощных нововведений стандарта C++20.Если ты когда-нибудь писал вот такой код:
std::vector<int> result;
for (const auto& x : data) {
if (x % 2 == 0) {
result.push_back(x * x);
}
}
..то ты знаешь, как это может быть многословно.
Ranges позволяют написать то же самое так:auto result = data
| std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x * x; });
Красиво? Ещё и эффективнее! Давай разберёмся, как это работает.
Для работы со всеми примерами нужен компилятор с поддержкой C++20 (и лучше C++23):
#include <ranges> // std::views, std::ranges::*
#include <algorithm> // std::ranges::sort и другие
Range (диапазон) — это любой тип, у которого есть начало ( begin ) и конец ( end ). Всё, что тыпривык итерировать в цикле for , уже является диапазоном.
std::vector<int> v = {1, 2, 3, 4, 5}; // ✓ Range
std::string s = "hello"; // ✓ Range
int arr[] = {1, 2, 3}; // ✓ Range
std::list<double> l = {1.1, 2.2}; // ✓ RangeС технической точки зрения, тип
R является диапазоном, если для него определеныstd::ranges::begin(r) и std::ranges::end(r) . В C++ это выражается через концепт:template<typename R>
concept range = requires(R& r) {
std::ranges::begin(r); // требуем наличие begin
std::ranges::end(r); // требуем наличие end
};
•
input_range — однопроходный обход (Пример: поток ввода)•
forward_range — многопроходный обход (Пример: std::forward_list)•
bidirectional_range — обход в обе стороны (Пример: std::list)•
random_access_range — доступ за O(1) по индексу (Пример: std::deque)•
contiguous_range — данные в непрерывной памяти (Пример: std::vector , массив)📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍8🙏2
😎 Топ-вакансий для C++ разработчиков за неделю
C++ Developer (Gates Team) — от 5 000 € Офис (Дубай, Амстердам)
Старший разработчик C++ — от 350 000 и до 500 000 ₽ Удалёнка
Middle+/Senior C++ Developer — от 2 500 и до 3 500 $ Удалёнка
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
C++ Developer (Gates Team) — от 5 000 € Офис (Дубай, Амстердам)
Старший разработчик C++ — от 350 000 и до 500 000 ₽ Удалёнка
Middle+/Senior C++ Developer — от 2 500 и до 3 500 $ Удалёнка
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
❤1👍1😁1
✌🏻 У нас две новости — хорошая и плохая!
Хорошая: Ваших знаний, скорее всего, хватит, чтобы собрать рабочую демку AI-агента в Colab. 🫡
Плохая: Вы вряд ли выведете его в прод, не обанкротившись на токенах и не слив базу. 🤯
Для защиты от таких сценариев мы полностью пересобрали курс «Разработка AI-агентов». Теперь внутри плотная работа с экономикой ресурсов, дебаг через time-travel в
Программа курса, полный состав спикеров и другие подробности 👈🏻
ВАЖНО! До 5 апреля на курс действует скидка, но свободные места могут закончиться раньше.
Хорошая: Ваших знаний, скорее всего, хватит, чтобы собрать рабочую демку AI-агента в Colab. 🫡
Плохая: Вы вряд ли выведете его в прод, не обанкротившись на токенах и не слив базу. 🤯
Для защиты от таких сценариев мы полностью пересобрали курс «Разработка AI-агентов». Теперь внутри плотная работа с экономикой ресурсов, дебаг через time-travel в
LangGraph, извлечение данных из кривых сканов для RAG и комплаенс по 152-ФЗ.Если всё ещё сомневаетесь, послушайте голосовое от спикера курса Влада Прошинского, где он объясняет, как правильно тестировать агентов перед релизом.
Программа курса, полный состав спикеров и другие подробности 👈🏻
ВАЖНО! До 5 апреля на курс действует скидка, но свободные места могут закончиться раньше.
😁2🥱1
Forwarded from Библиотека задач по C++ | тесты, код, задания
🧩 Задача на выходные: правильная ли это BST?
Классическая ловушка на собеседованиях. Этот код проверяет BST неправильно:
Для дерева:
Функция вернёт true. Но это не BST!
✏️ Объясни баг и перепиши функцию корректно.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Классическая ловушка на собеседованиях. Этот код проверяет BST неправильно:
bool isValidBST(TreeNode* node) {
if (!node) return true;
if (node->left && node->left->val >= node->val) return false;
if (node->right && node->right->val <= node->val) return false;
return isValidBST(node->left) && isValidBST(node->right);
}
Для дерева:
5
/ \
1 4
/ \
3 6
Функция вернёт true. Но это не BST!
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2❤1👍1🤔1
💼 30 сайтов для поиска работы в IT в 2026 году
Рынок IT-вакансий давно вышел за пределы
👉 Продолжение...
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
Рынок IT-вакансий давно вышел за пределы
hh.ru и LinkedIn. Одни площадки заточены под стартапы и equity-офферы, другие продвигают прозрачные зарплаты без буллшита, третьи созданы специально для первой работы после универа. В этом гайде собраны 30 джоб-сайтов с описанием, кому и зачем они подходят.👉 Продолжение...
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
😁4
🌻 C++26 официально готов!
На встрече международного комитета по стандартизации ISO C++ в Кройдоне поставлена финальная точка — стандарт C++26 сформирован. Осталось пройти формальные процедуры ISO, и мы получим один из самых насыщенных релизов за последние годы.
❗️Что войдёт в C++26:
• Reflection
• Контракты
• SIMD и линейная алгебра
• Расширенный constexpr
• Hardening (защитные механизмы)
• Hazard Pointer и RCU
• Executors
• И многое другое
‼️ Несколько интересных деталей из принятых изменений:
🔍 std::is_within_lifetime — теперь умеет не только проверять валидность объекта в compile-time, но и давать информацию о возможности downcast. Это открывает новый класс consteval-функций, позволяющих «расспрашивать» компилятор о скрытых свойствах программы.
🔒 std::atomic_ref::address() теперь возвращает void* вместо T* — чтобы исключить целый класс трудноуловимых ошибок в многопоточном коде.
⚠️ std::views::filter получил частичное исправление подводных камней. Новая рекомендация: всегда использовать std::views::as_input | перед фильтром. Полноценный std::views::safe_filter появится только в C++29, но его несложно реализовать самостоятельно уже сейчас.
Российские разработчики тоже внесли вклад: исправлена переносимость <random> для uint8_t, оптимизирована индирекция при использовании std::function_ref во фреймворке userver.
Что дальше? Комитет уже смотрит в сторону C++29: std::cstring_view, profiles, units и долгожданный pattern matching.
👉 Более подробный обзор
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
На встрече международного комитета по стандартизации ISO C++ в Кройдоне поставлена финальная точка — стандарт C++26 сформирован. Осталось пройти формальные процедуры ISO, и мы получим один из самых насыщенных релизов за последние годы.
❗️Что войдёт в C++26:
• Reflection
• Контракты
• SIMD и линейная алгебра
• Расширенный constexpr
• Hardening (защитные механизмы)
• Hazard Pointer и RCU
• Executors
• И многое другое
‼️ Несколько интересных деталей из принятых изменений:
🔍 std::is_within_lifetime — теперь умеет не только проверять валидность объекта в compile-time, но и давать информацию о возможности downcast. Это открывает новый класс consteval-функций, позволяющих «расспрашивать» компилятор о скрытых свойствах программы.
🔒 std::atomic_ref::address() теперь возвращает void* вместо T* — чтобы исключить целый класс трудноуловимых ошибок в многопоточном коде.
⚠️ std::views::filter получил частичное исправление подводных камней. Новая рекомендация: всегда использовать std::views::as_input | перед фильтром. Полноценный std::views::safe_filter появится только в C++29, но его несложно реализовать самостоятельно уже сейчас.
Российские разработчики тоже внесли вклад: исправлена переносимость <random> для uint8_t, оптимизирована индирекция при использовании std::function_ref во фреймворке userver.
Что дальше? Комитет уже смотрит в сторону C++29: std::cstring_view, profiles, units и долгожданный pattern matching.
👉 Более подробный обзор
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
💯6👍4❤1😢1
Продолжаем тему Ranges в C++.
В библиотеке
Ranges есть два главных инструмента работы с последовательностями:1.
std::ranges::* алгоритмы — переработанная версия классической библиотеки <algorithm>. Принимают не пару итераторов, а целый диапазон, поддерживают проекции и лучше взаимодействуют с современными типами.2.
std::views::* адаптеры — ленивые обёртки над диапазонами. Не копируют данные, а описывают как их обойти. Удобны для цепочек преобразований.std::vector<int> v = {5, 3, 1, 4, 2};
// Старый стиль: передаём пару итераторов
std::sort(v.begin(), v.end());
// Новый стиль: передаём весь диапазон
std::ranges::sort(v);• Синтаксически короче
• Поддерживают проекции — сортировку по произвольному полю объекта
• Работают с любым range-совместимым типом, не только с контейнерами
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<std::string> names = {"Boris", "Anton", "Victor", "Anna"};
std::ranges::sort(names);
for (const auto& name : names) {
std::cout << name << "\n";
}
// Anna, Anton, Boris, Victor
}
Одна из главных фич ranges-алгоритмов. Не нужно писать лямбду вручную — достаточно указать, по какому полю сортировать:
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>
struct Person {
std::string name;
int age;
};
int main() {
std::vector<Person> people = {
{"Boris", 30},
{"Anna", 25},
{"Victor", 35}
};
// Сортируем по возрасту, передав &Person::age как проекцию
std::ranges::sort(people, {}, &Person::age);
for (const auto& p : people) {
std::cout << p.name << " " << p.age << "\n";
}
// Anna 25, Boris 30, Victor 35
}
std::views не трогают исходный контейнер и не создают копий — они описывают трансформацию, которая применяется при обходе:#include <ranges>
#include <vector>
#include <iostream>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8};
// Берём только чётные, умножаем на 10, берём первые 3
auto result = v
| std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x * 10; })
| std::views::take(3);
for (int x : result) {
std::cout << x << "\n";
}
// 20, 40, 60
}
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1❤🔥1
Forwarded from Библиотека задач по C++ | тесты, код, задания
Что произойдёт при компиляции?
Anonymous Quiz
44%
Ошибка
13%
Предупреждение, но компилируется
35%
Компилируется успешно
3%
UB при запуске
5%
Ошибка только при -Wall
🥱4
🗄️ Исходники Cfront и документы по истории C++ — теперь в открытом доступе
❗
❗
❗Оригинальные документы по
❗Три HOPL-статьи Страуструпа охватывают эволюцию языка с 1979 по 2020 год — ни один учебник не даёт такой плотности контекста😎
✍️ Насколько современный C++ с его concepts, modules и consteval вообще узнаваем в том, что писал Страуструп в 1979-м?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
Computer History Museum собрал архив первоисточников по C++: от ранних технических отчётов Bell Labs до исходного кода транслятора Cfront всех релизов.❗
Cfront Release E (1985) — первый публичный релиз, по словам Страуструпа, написан им лично почти целиком. ❗
Хронология стандартизации: от первого заседания ANSI J16 (1989) до принятия templates, exceptions, RTTI, namespaces и STL. ❗Оригинальные документы по
operator overloading, data abstraction, coroutine-style programming — те самые идеи, которые сегодня оформились в RAII, coroutines и move semantics. ❗Три HOPL-статьи Страуструпа охватывают эволюцию языка с 1979 по 2020 год — ни один учебник не даёт такой плотности контекста😎
✍️ Насколько современный C++ с его concepts, modules и consteval вообще узнаваем в том, что писал Страуструп в 1979-м?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
🙏6👍2😁1
😎 Топ-вакансий для C++ разработчиков за неделю
Developer C++ (KSMG) — Удалёнка
Senior Android Security / Reverse Engineer (HTTPS Traffic, Google Services) — от 380 000 и до 500 000 ₽ Удалёнка
C++ Developer (Gates Team) — от 5 000 € Офис (Дубай, Амстердам)
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
Developer C++ (KSMG) — Удалёнка
Senior Android Security / Reverse Engineer (HTTPS Traffic, Google Services) — от 380 000 и до 500 000 ₽ Удалёнка
C++ Developer (Gates Team) — от 5 000 € Офис (Дубай, Амстердам)
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
👍1😁1
😎 Бенчмарк прямо в браузере, без сборки проекта
quick-bench.com — онлайн-бенчмарк на базе
❗️Поддержка флагов оптимизации
Можно переключать
❗️ Шаринг результатов
Каждый бенчмарк получает постоянную ссылку. Удобно в
📚 Библиотека готовых примеров
В сети можно найти примеры бенчмарков от сообщества:
✍️ Теперь ты сможешь поделиться своей ссылкой, чтобы доказать всем что твой код самый быстрый 🤠
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#линкер_рекомендует
quick-bench.com — онлайн-бенчмарк на базе
Google Benchmark. Пишешь два варианта кода, выбираешь стандарт (C++11–23) и компилятор (GCC или Clang) — и получаешь график сравнения.❗️Поддержка флагов оптимизации
Можно переключать
-O0, -O1, -O2, -O3 и видеть, как меняется разрыв между вариантами. Иногда «медленный» код с -O3 обходит «быстрый» без оптимизаций (Но это не точно😜).❗️ Шаринг результатов
Каждый бенчмарк получает постоянную ссылку. Удобно в
code review: вместо «мне кажется, так быстрее» — вот ссылка с числами.📚 Библиотека готовых примеров
В сети можно найти примеры бенчмарков от сообщества:
std::string vs string_view, heap vs stack, разные контейнеры. Можно учиться на чужих измерениях.✍️ Теперь ты сможешь поделиться своей ссылкой, чтобы доказать всем что твой код самый быстрый 🤠
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#линкер_рекомендует
🔥8❤1😁1
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
Сколько пользовательских преобразований компилятор может применить в одной неявной цепочке?
Anonymous Quiz
49%
Неограниченное количество, пока типы совместимы
21%
Ровно одно пользовательское преобразование
4%
Не более двух пользовательских преобразований
10%
Три: одно через конструктор, одно через оператор, одно встроенное
16%
Зависит от уровня оптимизации компилятора
❤1