Requires-expression
Вот основные особенности requires-expression:
— Логическое выражение: Оценивается в
— Используется для проверки:
— Соответствия типам и выражениям концепциям.
— Других требований к типам и выражениям.
Применение:
— Внутри шаблонов.
— Внутри
— Вне шаблонов и
Преимущества использования requires-expression:
— Улучшение читаемости и понятности кода: Требования к типам и выражениям становятся более явными.
— Повышение безопасности кода: Ошибки, связанные с несоответствием типов, выявляются во время компиляции.
— Улучшение производительности: Константные проверки требований позволяют оптимизировать код.
#для_продвинутых
Requires-expression (выражение требований) – это мощная функциональность, появившаяся в C++20, которая позволяет выражать требования к типам и выражениям непосредственно в коде.Вот основные особенности requires-expression:
— Логическое выражение: Оценивается в
true или false во время компиляции.— Используется для проверки:
— Соответствия типам и выражениям концепциям.
— Других требований к типам и выражениям.
Применение:
— Внутри шаблонов.
— Внутри
constexpr функций.— Вне шаблонов и
constexpr функций (с ограничениями).Преимущества использования requires-expression:
— Улучшение читаемости и понятности кода: Требования к типам и выражениям становятся более явными.
— Повышение безопасности кода: Ошибки, связанные с несоответствием типов, выявляются во время компиляции.
— Улучшение производительности: Константные проверки требований позволяют оптимизировать код.
#для_продвинутых
Что такое PIMPL?
PIMPL (Pointer to Implementation) — это идиома проектирования в C++, которая используется для управления инкапсуляцией деталей реализации класса и сокрытия их от пользователей класса. Она также известна как «Cheshire Cat» (улыбка Чеширского кота) из-за того, что она позволяет «убрать» детали реализации из интерфейса класса, оставив только указатель на них.
Идея PIMPL заключается в том, чтобы внести все детали реализации класса в отдельную структуру или класс, а затем хранить указатель на эту структуру в основном классе. Таким образом, пользователи класса видят только публичный интерфейс основного класса, а детали реализации остаются скрытыми.
#для_продвинутых
PIMPL (Pointer to Implementation) — это идиома проектирования в C++, которая используется для управления инкапсуляцией деталей реализации класса и сокрытия их от пользователей класса. Она также известна как «Cheshire Cat» (улыбка Чеширского кота) из-за того, что она позволяет «убрать» детали реализации из интерфейса класса, оставив только указатель на них.
Идея PIMPL заключается в том, чтобы внести все детали реализации класса в отдельную структуру или класс, а затем хранить указатель на эту структуру в основном классе. Таким образом, пользователи класса видят только публичный интерфейс основного класса, а детали реализации остаются скрытыми.
#для_продвинутых
Карьерный буст, робот в подарок и призовой фонд 7 500 000 рублей 🤖
Успей зарегистрироваться до 20 октября.
Все это ждет участников трека «Программирование роботов» на всероссийском ИТ-чемпионате МТС True Tech Champ 2025. Присоединяйся, если пишешь на С++, Go, Python, JS, Java, C# или другом языке.
Соревнования пройдут в командах от 2 до 4 человек в несколько этапов:
— Квалификация. Тебе предстоит запрограммировать робота на прохождение виртуального лабиринта.
— Полуфинал. Ты будешь дистанционно управлять роботом на офлайн-полигоне и наблюдать за его перемещениями в трансляции.
— Финал. За две недели до финала организаторы отправят тебе настоящего робота для кастомизации. Ты сможешь модифицировать его, чтобы он оказался быстрее других в многоуровневом офлайн-лабиринте и смог выбить соперников с платформы в шоу-битве.
Команды финалистов получат по одному роботу Waveshare Cobra Flex в подарок и сразятся за крупные денежные призы: 4 000 000 ₽ за первое место, 2 500 000 ₽ за второе и 1 000 000 ₽ за третье.
Еще ты сможешь:
— Получить практический опыт работы с инструментами, с помощью которых создают домашних и промышленных роботов.
— Прокачать компетенции, которые помогут развиваться в ИТ.
— Заявить о себе на всю Россию и ускорить свой профессиональный рост.
📍 Финал состоится 21 ноября в МТС Live Холл в Москве.
👉🏻 Регистрируйся на сайте до 20 октября.
Успей зарегистрироваться до 20 октября.
Все это ждет участников трека «Программирование роботов» на всероссийском ИТ-чемпионате МТС True Tech Champ 2025. Присоединяйся, если пишешь на С++, Go, Python, JS, Java, C# или другом языке.
Соревнования пройдут в командах от 2 до 4 человек в несколько этапов:
— Квалификация. Тебе предстоит запрограммировать робота на прохождение виртуального лабиринта.
— Полуфинал. Ты будешь дистанционно управлять роботом на офлайн-полигоне и наблюдать за его перемещениями в трансляции.
— Финал. За две недели до финала организаторы отправят тебе настоящего робота для кастомизации. Ты сможешь модифицировать его, чтобы он оказался быстрее других в многоуровневом офлайн-лабиринте и смог выбить соперников с платформы в шоу-битве.
Команды финалистов получат по одному роботу Waveshare Cobra Flex в подарок и сразятся за крупные денежные призы: 4 000 000 ₽ за первое место, 2 500 000 ₽ за второе и 1 000 000 ₽ за третье.
Еще ты сможешь:
— Получить практический опыт работы с инструментами, с помощью которых создают домашних и промышленных роботов.
— Прокачать компетенции, которые помогут развиваться в ИТ.
— Заявить о себе на всю Россию и ускорить свой профессиональный рост.
📍 Финал состоится 21 ноября в МТС Live Холл в Москве.
👉🏻 Регистрируйся на сайте до 20 октября.
Флаг компиляции -fPIC
Флаг компиляции
Код с независимой позицией необходим для создания динамических библиотек, которые могут быть загружены в память в любое место. Это также полезно для создания разделяемых модулей, которые могут быть подключены к другим программам.
Чтобы использовать флаг
Это создаст исполняемый файл main, который может быть связан с другими библиотеками.
#для_продвинутых
Флаг компиляции
-fPIC в С++ означает «Position Independent Code» (код с независимой позицией). Этот флаг заставляет компилятор создавать код, который может быть связан с другими библиотеками, независимо от того, где они расположены в памяти.Код с независимой позицией необходим для создания динамических библиотек, которые могут быть загружены в память в любое место. Это также полезно для создания разделяемых модулей, которые могут быть подключены к другим программам.
Чтобы использовать флаг
-fPIC, необходимо добавить его в командную строку компилятора. Например, для компиляции файла main.cpp с использованием флага -fPIC можно использовать следующую команду:g++ -fPIC main.cpp -o main
Это создаст исполняемый файл main, который может быть связан с другими библиотеками.
#для_продвинутых
⌨️ Открытый урок «Умные указатели в С++»
🗓 23 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C++ Developer. Professional».
🎯 Что рассмотрим на вебинаре:
✔️ Узнаем, для чего нужны умные указатели
✔️ Рассмотрим правило "взял память - верни, когда больше не нужна"
✔️ Разберемся с разными типами умных указателей
👥 Кому будет интересно:
- junior, junior+ C++ Разработчикам
Чему научатся участники по итогам вебинара:
- Научимся решать проблему управления ресурсами
- Рассмотрим глупый умный указатель; unique_ptr.; Shared_ptr; weak_ptr; enable_shared_from_this
- Научимся выбирать нужный умный указатель
🔗 Ссылка на регистрацию: https://otus.pw/5Dlx/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🗓 23 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C++ Developer. Professional».
🎯 Что рассмотрим на вебинаре:
✔️ Узнаем, для чего нужны умные указатели
✔️ Рассмотрим правило "взял память - верни, когда больше не нужна"
✔️ Разберемся с разными типами умных указателей
👥 Кому будет интересно:
- junior, junior+ C++ Разработчикам
Чему научатся участники по итогам вебинара:
- Научимся решать проблему управления ресурсами
- Рассмотрим глупый умный указатель; unique_ptr.; Shared_ptr; weak_ptr; enable_shared_from_this
- Научимся выбирать нужный умный указатель
🔗 Ссылка на регистрацию: https://otus.pw/5Dlx/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Forward_list
#для_продвинутых
Forward_list в C++ - это контейнер, поддерживающий быструю вставку и удаление элементов из любого места в контейнере. Быстрый доступ к случайным элементам не поддерживается. Реализуется как односвязный список. По сравнению с std::list этот контейнер обеспечивает более эффективное хранение памяти, когда двунаправленная итерация не требуется.Forward_list соответствует требованиям Container (за исключением члена функции size и того, что сложность оператора == всегда линейна), AllocatorAwareContainer и SequenceContainer.#для_продвинутых
std::format
Форматирование текста с помощью
Чтобы использовать
#для_начинающих
std::format — это функция в C++, которая используется для форматирования текста. Она может использоваться для вставки значений переменных, строк и других объектов в шаблон текста.Форматирование текста с помощью
std::format похоже на форматирование текста с помощью printf. Однако std::format более безопасный и эффективный, чем printf.Чтобы использовать
std::format, вам необходимо включить заголовочный файл <format>.#для_начинающих
Хотите собрать свой мини-Google? 🚀
🗓 22 октября, 20:00 приглашаем на открытый урок OTUS «Мини-поисковик своими руками». На этом вебинаре вы создадите поисковик с нуля — без готовых библиотек и магии. Только алгоритмы и код.
Разберём, как:
• объединить КМП и префиксное дерево;
• реализовать автодополнение и подсчёт вхождений;
• оптимизировать поиск под большие тексты;
• превратить всё это в маленький, но работающий офлайн-поисковик.
После вебинара вы сможете самостоятельно:
— строить индекс слов и быстро искать по нему;
— собирать статистику запросов;
— понять, как внутри устроены поисковики.
Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.
Присоединяйтесь 22 октября в 20:00:
https://otus.pw/tJkvH/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🗓 22 октября, 20:00 приглашаем на открытый урок OTUS «Мини-поисковик своими руками». На этом вебинаре вы создадите поисковик с нуля — без готовых библиотек и магии. Только алгоритмы и код.
Разберём, как:
• объединить КМП и префиксное дерево;
• реализовать автодополнение и подсчёт вхождений;
• оптимизировать поиск под большие тексты;
• превратить всё это в маленький, но работающий офлайн-поисковик.
После вебинара вы сможете самостоятельно:
— строить индекс слов и быстро искать по нему;
— собирать статистику запросов;
— понять, как внутри устроены поисковики.
Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.
Присоединяйтесь 22 октября в 20:00:
https://otus.pw/tJkvH/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
ext_aggregate
Функция
Первый аргумент — это контейнер, над элементами которого необходимо вычислить агрегатную функцию.
Второй аргумент — это функция, которая определяет агрегатную функцию, которую необходимо вычислить.
Функция
#для_продвинутых
ext_aggregate — это функция, которая используется для вычисления агрегатных функций над элементами контейнера. Агрегатные функции — это функции, которые возвращают значение, основанное на значениях всех элементов контейнера. Например, функция sum() возвращает сумму всех элементов контейнера, а функция max() возвращает максимальное значение в контейнере.Функция
ext_aggregate принимает два аргумента:Первый аргумент — это контейнер, над элементами которого необходимо вычислить агрегатную функцию.
Второй аргумент — это функция, которая определяет агрегатную функцию, которую необходимо вычислить.
Функция
ext_aggregate возвращает значение, вычисленное агрегатной функцией.#для_продвинутых
#вопросы_с_собеседований
Может ли inline-функция быть рекурсивной в С++?
Да, inline-функция может быть рекурсивной в С++. Однако, компилятор может отказаться от встраивания рекурсивной функции, если это приведет к чрезмерному расходу памяти или времени.
Чтобы заставить компилятор встроить рекурсивную функцию, можно использовать директиву препроцессора
На картинке выше функция вычисляет факториал числа. При компиляции этой функции с помощью компилятора GCC с опцией -O2 будет получен следующий результат:
Это означает, что функция
Однако, если компилятор считает, что встраивание рекурсивной функции приведет к чрезмерному расходу памяти или времени, он может отказаться от этого. Например, если функция
Может ли inline-функция быть рекурсивной в С++?
Да, inline-функция может быть рекурсивной в С++. Однако, компилятор может отказаться от встраивания рекурсивной функции, если это приведет к чрезмерному расходу памяти или времени.
Чтобы заставить компилятор встроить рекурсивную функцию, можно использовать директиву препроцессора
#pragma inline_recursion(on).На картинке выше функция вычисляет факториал числа. При компиляции этой функции с помощью компилятора GCC с опцией -O2 будет получен следующий результат:
factorial(int) at factorial.cc:5
Это означает, что функция
factorial будет встроена в код.Однако, если компилятор считает, что встраивание рекурсивной функции приведет к чрезмерному расходу памяти или времени, он может отказаться от этого. Например, если функция
factorial вызывается очень часто, компилятор может решить, что встраивание функции приведет к избыточному дублированию кода. В этом случае компилятор будет использовать обычный вызов функции.Объясните разницу между глубоким и поверхностным копированием и приведите пример, когда каждый тип копирования может быть предпочтительнее.
Глубокое копирование создаёт новый объект, копируя все поля источника и рекурсивно создавая копии всех объектов, на которые эти поля ссылаются. Таким образом, все ссылки в копии ведут на отдельные объекты, не связанные с оригиналом. Поверхностное копирование создаёт новый объект, но копирует только значения полей на верхнем уровне. Если поля являются ссылками на другие объекты, то копия будет ссылаться на те же объекты, что и исходный.
Глубокое копирование предпочтительно, когда нужно полностью изолировать копию от оригинала, чтобы изменения в одном не влияли на другой. Поверхностное копирование эффективно, когда нужно сэкономить память или время на копирование, и если объекты, на которые есть ссылки, не изменяются или их изменения допустимы в обоих экземплярах.
#вопросы_с_собеседований
Глубокое копирование предпочтительно, когда нужно полностью изолировать копию от оригинала, чтобы изменения в одном не влияли на другой. Поверхностное копирование эффективно, когда нужно сэкономить память или время на копирование, и если объекты, на которые есть ссылки, не изменяются или их изменения допустимы в обоих экземплярах.
#вопросы_с_собеседований
Прочел на днях пост Вани Ходора (бэкенд-разработчик из Лавки) и вот что думаю. Мы привыкли думать про скорость как про «миллисекунды в графиках». Но speculative execution — про другое: про обещание. Обещание, что ваш продукт окажется там, где пользователь собирается быть, на полшага раньше него. Это и есть «магия» ощущения мгновенности.
Когда «спекуляция» — это фича, а не расточительство
Есть предсказуемый следующий шаг. Лента листается дальше, корзину после карточки товара открывают часто, фильтры в карте включают по типовым шаблонам. Если путь вероятен — предзагружайте.
Психология выигрыша больше, чем цена железа. Пользователь чувствует разницу между 800 мс и 80 мс сильнее, чем продукт-команда счет за CPU. Но только там, где эта разница влияет на удержание, конверсию, повтор.
Стоимость отказа низкая. Если «угадали» неправильно — легко выкинуть результат и не испортить состояние системы (идемпотентность, компенсации, отмены).
Формула грубо такая:
ожидаемая выгода = p(угадали) × выигрыш от скорости − (1 − p) × цена лишней работы.
Пока правая часть положительная — вы в плюсе.
Инженерные поручни (чтобы не сорваться)
Идемпотентность и отмена. Спекулятивные ветки должны быть безопасны к повтору и просто отменяемы (cancellation tokens, TTL на задания).
Бюджеты и приоритеты. Не «всегда префетчить», а «префетчить при свободных бюджетах»: квоты на пользователя/сессию/датацентр, классы приоритетов, circuit breakers.
Деградация и фолбэки. Нет бюджета — живём без спекуляции; нет сигналов — не угадываем.
Анти-шторм. Избегайте dogpile: джоб-коалесинг (одна задача на ключ), кэши с soft-TTL, jitter на обновления.
Наблюдаемость именно под спекуляцию. Отдельные метрики: hit-rate предсказаний, доля отменённых вычислений, «цена хита» (CPU/IO на один успешный предзагруженный ответ), влияние на p95/p99 основной ручки.
Сигналы лучше, чем хрустальный шар
Спекуляция не обязана быть «ML-магией». Начните с простых сигналов:
UI-хинты: вкладка «постинг» открыта → прогреть аплоад; виден блок «Похожие» → подгрузить их.
Поведенческие частоты: «после X часто делают Y» → прогреть Y.
Временные окна: топ-запросы часа/дня предвычислять пачками.
Когда эвристики исчерпаны — добавляйте модель. Но помните: для бизнеса важнее precision (не сжигать впустую), чем recall (угадать каждый шаг). Лучше 60% попаданий при дешёвой промашке, чем 90% с дорогой.
Экономика кэширования без самообмана
Управляйте свежестью. SLA на «мгновенность» ≠ SLA на «абсолютную актуальность». Делите ручки по требованиям к свежести, ставьте разные TTL/источники правды.
Локальный прогрев важнее «всё и сразу». Прогревать следующие 10 постов лучше, чем следующие 100, если это сохраняет p95 и батарейку пользователя.
Безопасность и этика (да, это сюда)
Спекуляция — это иногда пересылка/хранение того, что пользователь может быть захочет отправить. Значит:
явное согласие и прозрачность (особенно для медиа и PII),
шифрование на клиенте и в транзите,
уважение к лимитам устройства (сеть, батарея), доступность оффлайн.
Как начать завтра и не сжечь прод
Гипотеза → метрика → бюджет. «Если прогреем X, то конверсия в Y +N% при цене Z».
Теневой режим. Считать и отменять, не влияя на пользовательский ответ. Померили hit-rate и цену.
Маленький тумблер. 1–5% трафика, фича-флаг, откат за один клик.
Платформизируйте удачу. Вынесите в библиотеку/сервис: API «попроси спекуляцию», приоритеты, бюджеты, кэши, отмена, логирование.
Где ломаются хорошие идеи
Удвоили самые тяжёлые запросы «на всякий случай». Бюджетов нет — счёт растёт.
Спорная согласованность: кэш мгновенный, но устаревший → пользователь теряет доверие.
«Предсказываем всё» на мобильной сети → минус батарея и лояльность.
Нет идемпотентности → редкие гонки превращаются в баги с деньгами.
Спекулятивное исполнение — не трюк, а способ выразить заботу о времени пользователя. Это разговор бэкенда с продуктом на одном языке: «мы инвестируем ресурсы туда, где ускорение заметят и оценят».
Когда «спекуляция» — это фича, а не расточительство
Есть предсказуемый следующий шаг. Лента листается дальше, корзину после карточки товара открывают часто, фильтры в карте включают по типовым шаблонам. Если путь вероятен — предзагружайте.
Психология выигрыша больше, чем цена железа. Пользователь чувствует разницу между 800 мс и 80 мс сильнее, чем продукт-команда счет за CPU. Но только там, где эта разница влияет на удержание, конверсию, повтор.
Стоимость отказа низкая. Если «угадали» неправильно — легко выкинуть результат и не испортить состояние системы (идемпотентность, компенсации, отмены).
Формула грубо такая:
ожидаемая выгода = p(угадали) × выигрыш от скорости − (1 − p) × цена лишней работы.
Пока правая часть положительная — вы в плюсе.
Инженерные поручни (чтобы не сорваться)
Идемпотентность и отмена. Спекулятивные ветки должны быть безопасны к повтору и просто отменяемы (cancellation tokens, TTL на задания).
Бюджеты и приоритеты. Не «всегда префетчить», а «префетчить при свободных бюджетах»: квоты на пользователя/сессию/датацентр, классы приоритетов, circuit breakers.
Деградация и фолбэки. Нет бюджета — живём без спекуляции; нет сигналов — не угадываем.
Анти-шторм. Избегайте dogpile: джоб-коалесинг (одна задача на ключ), кэши с soft-TTL, jitter на обновления.
Наблюдаемость именно под спекуляцию. Отдельные метрики: hit-rate предсказаний, доля отменённых вычислений, «цена хита» (CPU/IO на один успешный предзагруженный ответ), влияние на p95/p99 основной ручки.
Сигналы лучше, чем хрустальный шар
Спекуляция не обязана быть «ML-магией». Начните с простых сигналов:
UI-хинты: вкладка «постинг» открыта → прогреть аплоад; виден блок «Похожие» → подгрузить их.
Поведенческие частоты: «после X часто делают Y» → прогреть Y.
Временные окна: топ-запросы часа/дня предвычислять пачками.
Когда эвристики исчерпаны — добавляйте модель. Но помните: для бизнеса важнее precision (не сжигать впустую), чем recall (угадать каждый шаг). Лучше 60% попаданий при дешёвой промашке, чем 90% с дорогой.
Экономика кэширования без самообмана
Управляйте свежестью. SLA на «мгновенность» ≠ SLA на «абсолютную актуальность». Делите ручки по требованиям к свежести, ставьте разные TTL/источники правды.
Локальный прогрев важнее «всё и сразу». Прогревать следующие 10 постов лучше, чем следующие 100, если это сохраняет p95 и батарейку пользователя.
Безопасность и этика (да, это сюда)
Спекуляция — это иногда пересылка/хранение того, что пользователь может быть захочет отправить. Значит:
явное согласие и прозрачность (особенно для медиа и PII),
шифрование на клиенте и в транзите,
уважение к лимитам устройства (сеть, батарея), доступность оффлайн.
Как начать завтра и не сжечь прод
Гипотеза → метрика → бюджет. «Если прогреем X, то конверсия в Y +N% при цене Z».
Теневой режим. Считать и отменять, не влияя на пользовательский ответ. Померили hit-rate и цену.
Маленький тумблер. 1–5% трафика, фича-флаг, откат за один клик.
Платформизируйте удачу. Вынесите в библиотеку/сервис: API «попроси спекуляцию», приоритеты, бюджеты, кэши, отмена, логирование.
Где ломаются хорошие идеи
Удвоили самые тяжёлые запросы «на всякий случай». Бюджетов нет — счёт растёт.
Спорная согласованность: кэш мгновенный, но устаревший → пользователь теряет доверие.
«Предсказываем всё» на мобильной сети → минус батарея и лояльность.
Нет идемпотентности → редкие гонки превращаются в баги с деньгами.
Спекулятивное исполнение — не трюк, а способ выразить заботу о времени пользователя. Это разговор бэкенда с продуктом на одном языке: «мы инвестируем ресурсы туда, где ускорение заметят и оценят».
Telegram
this->notes.
#highload
Есть такой паттерн speculative execution (⢉⡌⠅ ⡰⠨⠡⡨⠒⠆⢐⠎⠌ ⠊⣄⠤⠲⢊⠖⠅⠊⢐ ⢁⣁⠜⡠⢢⡌⡰⢁⢠⠔⠉ ⠙⡆ ⢁⡃ ⡤⣐⠤⡈⢄⣠⢄⢌⣂⢨⠋⡐⢠ ⢔⢄⠒⠔⡘⠅⢌⠉⠡⠆). Паттерн заключается в том, чтобы делать префетч данных ещё до того, как пользователь захочет что-то увидеть, чтобы в момент, когда он…
Есть такой паттерн speculative execution (⢉⡌⠅ ⡰⠨⠡⡨⠒⠆⢐⠎⠌ ⠊⣄⠤⠲⢊⠖⠅⠊⢐ ⢁⣁⠜⡠⢢⡌⡰⢁⢠⠔⠉ ⠙⡆ ⢁⡃ ⡤⣐⠤⡈⢄⣠⢄⢌⣂⢨⠋⡐⢠ ⢔⢄⠒⠔⡘⠅⢌⠉⠡⠆). Паттерн заключается в том, чтобы делать префетч данных ещё до того, как пользователь захочет что-то увидеть, чтобы в момент, когда он…
#вопросы_с_собеседований
Напишите программу на C++, которая запрашивает у пользователя два числа и выполняет одну из простых математических операций: сложение, вычитание, умножение или деление. Пользователь должен вводить операцию в виде символа (+, -, *, /).
Подсказка: Используйте конструкцию switch для выполнения различных операций.
Решение:
1. Переменные: Определить переменные для чисел и операции.
2. Ввод данных: Запросить у пользователя два числа и символ операции.
3. Выбор операции: Использовать switch для определения типа операции.
4. Выполнение операции: Выполнить выбранную операцию, учитывая возможные ошибки (деление на ноль).
5. Вывод результата: Вывести результат операции.
6. Обработка ошибок: В случае ошибки вывести сообщение и завершить программу.
7. Возвращение значения: Вернуть 0 при успешном завершении, ненулевой код при ошибке.
Напишите программу на C++, которая запрашивает у пользователя два числа и выполняет одну из простых математических операций: сложение, вычитание, умножение или деление. Пользователь должен вводить операцию в виде символа (+, -, *, /).
Подсказка: Используйте конструкцию switch для выполнения различных операций.
Решение:
2. Ввод данных: Запросить у пользователя два числа и символ операции.
3. Выбор операции: Использовать switch для определения типа операции.
4. Выполнение операции: Выполнить выбранную операцию, учитывая возможные ошибки (деление на ноль).
5. Вывод результата: Вывести результат операции.
6. Обработка ошибок: В случае ошибки вывести сообщение и завершить программу.
7. Возвращение значения: Вернуть 0 при успешном завершении, ненулевой код при ошибке.
🚨 Быстрые изменения, дедлайны и новые вызовы — в таком ритме легко выгореть самому и потерять команду.
На открытом уроке курса «Team Lead» разберём, как руководителю распознать тревожность и стресс в коллективе, что реально работает для поддержки людей и как самому оставаться в ресурсе.
Вы узнаете техники, которые помогут пройти через «шторм» изменений вместе с командой и сделать её сплочённее и сильнее.
➡️ Присоединяйтесь к вебинару 23 октября в 19:00 МСК и получите практические инструменты, которые вы сможете применить сразу: https://otus.pw/SDz5/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
На открытом уроке курса «Team Lead» разберём, как руководителю распознать тревожность и стресс в коллективе, что реально работает для поддержки людей и как самому оставаться в ресурсе.
Вы узнаете техники, которые помогут пройти через «шторм» изменений вместе с командой и сделать её сплочённее и сильнее.
➡️ Присоединяйтесь к вебинару 23 октября в 19:00 МСК и получите практические инструменты, которые вы сможете применить сразу: https://otus.pw/SDz5/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
#вопросы_с_собеседований
Что такое stack overflow?
stack overflow (переполнение стека) — это программная ошибка, которая возникает, когда программа пытается использовать больше памяти на стеке, чем доступно. Стэк — это область памяти, используемая для хранения локальной информации функций, таких как параметры, локальные переменные и возвращаемые значения.
Когда функция вызывается, ее адрес возврата сохраняется на стеке. Затем, когда функция завершается, ее адрес возврата восстанавливается из стека, и управление передается следующей функции в стеке вызовов.
Когда происходит переполнение стека, программа аварийно завершается. Это может привести к потере данных или даже к повреждению системы.
Что такое stack overflow?
stack overflow (переполнение стека) — это программная ошибка, которая возникает, когда программа пытается использовать больше памяти на стеке, чем доступно. Стэк — это область памяти, используемая для хранения локальной информации функций, таких как параметры, локальные переменные и возвращаемые значения.
Когда функция вызывается, ее адрес возврата сохраняется на стеке. Затем, когда функция завершается, ее адрес возврата восстанавливается из стека, и управление передается следующей функции в стеке вызовов.
Когда происходит переполнение стека, программа аварийно завершается. Это может привести к потере данных или даже к повреждению системы.
Poco
Набор open-sorce библиотек для создания кроссплатформенных сетевых и веб-приложений на C++, хорош тем, что множество типовых задач в библиотеке уже решены, что уменьшает время разработки и ошибки, плюс реализована удобная работа с базами данныхSQL, MonoDB и Redis.
https://pocoproject.org
Набор open-sorce библиотек для создания кроссплатформенных сетевых и веб-приложений на C++, хорош тем, что множество типовых задач в библиотеке уже решены, что уменьшает время разработки и ошибки, плюс реализована удобная работа с базами данныхSQL, MonoDB и Redis.
https://pocoproject.org
Санкт-Петербург, 13 ноября в 19:00
Разберём архитектуру облачной записи встреч, наведём порядок в API и покажем, как простые решения спасают сервисы.
В программе:
📌 Как не упустить важное: архитектура облачной записи и конспектирования видеовстреч в Телемосте — Илья Григорьев, разработчик бэкенда Телемоста.
📌 Укрощение API: процессы и инструменты, которые действительно работают — Никита Ломакин, разработчик в команде Техплатформы.
📌 Как мы закапывали звездолёт: почему важно отстаивать простоту на архревью — Артемий Коцюбенко, разработчик протокольных сервисов Почты.
Команда Яндекс 360 работает с нагрузками >1.000.000+ RPS и создает продукты которыми пользуются 95+ млн человек каждый месяц — Диск, Почта, Телемост, Мессенджер и другие.
🍻А после докладов вас будут ждать афтепати и нетворкинг!
Регистрируйтесь по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
Бинарный поиск
Чаще всего бинарный поиск (бинпоиск) используют, чтобы найти элемент в отсортированном массиве. Мы начинаем искать с середины массива. Если находим то, что нужно, или если больше нечего рассматривать, мы останавливаемся. В противном случае мы решаем, в каком направлении — вправо или влево от середины — мы должны продолжить поиск. Так как пространство поиска после каждой проверки делится на два, то время выполнения алгоритма — O(log n).
Чаще всего бинарный поиск (бинпоиск) используют, чтобы найти элемент в отсортированном массиве. Мы начинаем искать с середины массива. Если находим то, что нужно, или если больше нечего рассматривать, мы останавливаемся. В противном случае мы решаем, в каком направлении — вправо или влево от середины — мы должны продолжить поиск. Так как пространство поиска после каждой проверки делится на два, то время выполнения алгоритма — O(log n).