Дано целое число, преобразовать его в римскую цифру
В нашем решении метод intToRoman принимает целое число в качестве аргумента и возвращает его римское представление в виде строки.
Внутри метода intToRoman создаются четыре массива строк, которые содержат римские числа для единиц, десятков, сотен и тысяч. Затем создается строка Roman, которая формируется путем конкатенации соответствующих элементов из каждого массива, используя арифметические операции для определения индексов.
#код
В нашем решении метод intToRoman принимает целое число в качестве аргумента и возвращает его римское представление в виде строки.
Внутри метода intToRoman создаются четыре массива строк, которые содержат римские числа для единиц, десятков, сотен и тысяч. Затем создается строка Roman, которая формируется путем конкатенации соответствующих элементов из каждого массива, используя арифметические операции для определения индексов.
#код
Архитектурные стили Web API — это концептуальные модели, которые определяют, как разрабатывать и взаимодействовать с API, используя определённые правила и принципы.
✔️ Приходите на вебинар, где мы не только разберем популярные стили и протоколы, для создания веб-приложений, но и на практике применим эти технологий.
⚡️ Это занятие важно для всех, кому интересна история развития современных технологий веб-разработки и ASP.NET в частности!
Урок проведет Виктор Дзицкий. Опыт разработки на C# и ASP.NET более 10 лет. А курс C# ASP.NET Core разработчик стартует в октябре. За 6 месяцев вы станете fullstack-специалистом и сможете претендовать на зарплату 180000+ руб.
Регистрируйтесь сейчас: https://otus.pw/IkWc/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Урок проведет Виктор Дзицкий. Опыт разработки на C# и ASP.NET более 10 лет. А курс C# ASP.NET Core разработчик стартует в октябре. За 6 месяцев вы станете fullstack-специалистом и сможете претендовать на зарплату 180000+ руб.
Регистрируйтесь сейчас: https://otus.pw/IkWc/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Алгоритмический тренинг.
Решения практических задач
на Python и С++
Автор: Максим Иванов
Дата выхода: 2023
#cpp #python #ru #2O23
Скачать книгу
Решения практических задач
на Python и С++
Автор: Максим Иванов
Дата выхода: 2023
#cpp #python #ru #2O23
Скачать книгу
C# позволяет извлечь информацию о типах данных, которые используются в программе. При помощи нее можно создавать генераторы кода, новые классы, создавать провайдеры в другие системы и многое другое.
Приходите на открытый урок «Использование механизма Reflection для генерации кода». Мы рассмотрим:
1️⃣ Что такое Reflection
2️⃣ Как в reflection нам помогают атрибуты
3️⃣ При помощи reflection мы создадим мини ORM позволяющую создавать SQL код для генерации БД на основе классов (code-first подход)
Кому полезно: C# разработчикам, которые хотят научиться создавать более гибкие и динамичные приложения с использованием продвинутых техник программирования.
✅ Бонус за регистрацию «Топ 5 ошибок, которые допускают джуны на собеседованиях (и как их избежать)». Записывайтесь: https://clck.ru/3DYXv6
Приходите на открытый урок «Использование механизма Reflection для генерации кода». Мы рассмотрим:
Кому полезно: C# разработчикам, которые хотят научиться создавать более гибкие и динамичные приложения с использованием продвинутых техник программирования.
✅ Бонус за регистрацию «Топ 5 ошибок, которые допускают джуны на собеседованиях (и как их избежать)». Записывайтесь: https://clck.ru/3DYXv6
Please open Telegram to view this post
VIEW IN TELEGRAM
Методы программирования
в задачах и примерах
на C/C++
Автор: А. А. Корнев
Дата выхода: 2023
#c #cpp #ru #2O23
Скачать книгу
в задачах и примерах
на C/C++
Автор: А. А. Корнев
Дата выхода: 2023
#c #cpp #ru #2O23
Скачать книгу
👍1
Вебинар «Обработка исключений в C#»: Спотыкайтесь, но оставайтесь на ногах!
Приходите, чтобы:
- Разобраться с основами класса System.Exception и его производными
- Научиться применять ключевые конструкции для перехвата исключений
- Открыть для себя лучшие практики обработки ошибок, которые используют профи
Что вас ждёт:
- Узнаете, какие типы исключений существуют в C# и научитесь создавать свои
- Поймёте, когда и почему возникают ошибки, и как их избежать
- И самое важное – узнаете, каких ошибок стоит бояться, а какие можно спокойно игнорировать!
Регистрируйтесь сейчас: https://otus.pw/6txz/
2 главных преимущества курса C# Developer:
Охватывает все ключевые аспекты программирования на C#. Вы научитесь разрабатывать сложные клиент-серверные приложения, что позволит претендовать на позиции уровня Middle.
Вы создадите полноценное приложение с нуля, используя Docker, CI/CD, React или Razor, и современные API технологии (GraphQL, gRPC, SignalR). Это не просто обучение — вы выходите с реальным проектом в портфолио!
Познакомьтесь с преподавателем на уроке: https://otus.pw/6txz/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приходите, чтобы:
- Разобраться с основами класса System.Exception и его производными
- Научиться применять ключевые конструкции для перехвата исключений
- Открыть для себя лучшие практики обработки ошибок, которые используют профи
Что вас ждёт:
- Узнаете, какие типы исключений существуют в C# и научитесь создавать свои
- Поймёте, когда и почему возникают ошибки, и как их избежать
- И самое важное – узнаете, каких ошибок стоит бояться, а какие можно спокойно игнорировать!
Регистрируйтесь сейчас: https://otus.pw/6txz/
2 главных преимущества курса C# Developer:
Охватывает все ключевые аспекты программирования на C#. Вы научитесь разрабатывать сложные клиент-серверные приложения, что позволит претендовать на позиции уровня Middle.
Вы создадите полноценное приложение с нуля, используя Docker, CI/CD, React или Razor, и современные API технологии (GraphQL, gRPC, SignalR). Это не просто обучение — вы выходите с реальным проектом в портфолио!
Познакомьтесь с преподавателем на уроке: https://otus.pw/6txz/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Starting Out with C++ from Control
Structures to Objects
Автор: Tony Gaddis
Год издания: 2022
#cpp #en #2O22
Скачать книгу
Structures to Objects
Автор: Tony Gaddis
Год издания: 2022
#cpp #en #2O22
Скачать книгу
👍2❤1👌1
•
erase()
— удаляет один элемента или диапазон элементов из контейнера, такого как std::vector, std::set, и т.д.•
clear()
— удаляет все элементы из контейнера, оставляя его пустым. После вызова clear() размер контейнера становится равным нулю.🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2🎃1
This media is not supported in your browser
VIEW IN TELEGRAM
sololearn — сайт, на котором вы найдете интерактивный курс по C++ как для начинающих, так и для опытных разработчиков. Также на сайте есть встроенная нейросеть, которая разберёт ваши неправильные ответы.
📌 Ссылочка: sololearn.com
📣 Уютное сообщество С++ разработчиков | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👌2
Beginning C++ Compilers
Авторы: Ademi B. Ospanova,
Berik I. Tuleuov
Дата выхода: 2024
#cpp #en #2O24
Скачать книгу
Авторы: Ademi B. Ospanova,
Berik I. Tuleuov
Дата выхода: 2024
#cpp #en #2O24
Скачать книгу
👌2👍1
Современный C++ безопасное использование
Авторы: Джон Лакос, Витторио Ромео,
Ростислав Хлебников
Дата выхода: 2023
#cpp #ru #2O23
Скачать книгу
Авторы: Джон Лакос, Витторио Ромео,
Ростислав Хлебников
Дата выхода: 2023
#cpp #ru #2O23
Скачать книгу
👍2
Неименованные параметры функций
С++ позволяет не указывать имена параметров функций, если они не используются в коде.
Это можно делать и в объявлении функции, и в ее определении.
Важный момент, что отсутствие имени параметра не говорит о том, что параметра нет и его не нужно передавать. Для вызова такой функции вы должны передать в нее аргумент соответствующего типа. Даже если он ничего не делает полезного.
Но вот вопрос возникает тогда. Если параметр ничего не делает, нахрена он тогда вообще нужен?
На самом деле много кейсов, где неименованный параметр может пригодится.
💥 Допустим, у вас есть функция, которая используется в очень многих местах кода, может даже через какие-нибудь указатели на функцию. И в один момент времени часть функционала стала ненужной и один или несколько параметров стали ненужны. Править все вызовы этой функции было бы болью, особенно если туда вовлечены function поинтеры. Вместо этого вы можете сделать эти параметры безымянными, чтобы явно в коде показать, что этот параметр не используется. Его и нельзя даже будет использовать.
💥 Заглушки. Зачастую для тестирования функциональности применяют сущности-болванки, которые внешне ведут себя, как нормальные ребята, но на самом деле они лодыри и ничего путного не делают. Это нужно для мокания соседних модулей, чтобы протестировать только функциональность выбранного набора модулей. Такие заглушки должны выглядеть подобающе, то есть полностью повторять апи замоканой сущности, но могут не делать никакой полезной работы. Поэтому можно в этом апи сделать безымянные параметры, чтобы еще раз подчеркнуть, что они не используются.
💥 Иногда существующие сущности в коде требуют коллбэки определенного вида. И вам в своем коллбэке возможно не нужно использовать весь набор параметров. Но для соблюдения апи вы должны их указать в сигнатуре своего обратного вызова. В этом случае можно сделать эти параметры безымянными.
💥 Иногда в иерархии полиморфных классов в конкретном наследнике вам не нужны все параметры виртуальной функции. Но для поддержания корректности переопределения виртуального интерфейса вы должны включить все параметры в сигнатуру метода. Опять же, неиспользуемые параметры можно пометить безымянными.
💥 Знаменитая перегрузка постфиксного оператора инкремента/декремента. Есть 2 вида этих операторов: префикстный и постфиксный. Проблема в том, что это все еще вызов функции operator++. Как различить реализации этих функций? Правильно, нужна перегрузка. Вот здесь и приходит на помощь безымянный параметр: в коде он не нужен, но влияет на выбор конкретной перегрузки. Выглядит это так:
В целом, эта фича нужна либо для соблюдения существующего апи, либо для того, чтобы при вызове функции гарантировано вызвалась правильная перегрузка.
Stay useful. Stay cool.
📣 Уютное сообщество С++ разработчиков #cppcore #design
С++ позволяет не указывать имена параметров функций, если они не используются в коде.
void foo(int /no name here/);
void foo(int /no name here/)
{
std::cout << "foo" << std::endl;
}
foo(5);
Это можно делать и в объявлении функции, и в ее определении.
Важный момент, что отсутствие имени параметра не говорит о том, что параметра нет и его не нужно передавать. Для вызова такой функции вы должны передать в нее аргумент соответствующего типа. Даже если он ничего не делает полезного.
Но вот вопрос возникает тогда. Если параметр ничего не делает, нахрена он тогда вообще нужен?
На самом деле много кейсов, где неименованный параметр может пригодится.
💥 Допустим, у вас есть функция, которая используется в очень многих местах кода, может даже через какие-нибудь указатели на функцию. И в один момент времени часть функционала стала ненужной и один или несколько параметров стали ненужны. Править все вызовы этой функции было бы болью, особенно если туда вовлечены function поинтеры. Вместо этого вы можете сделать эти параметры безымянными, чтобы явно в коде показать, что этот параметр не используется. Его и нельзя даже будет использовать.
💥 Заглушки. Зачастую для тестирования функциональности применяют сущности-болванки, которые внешне ведут себя, как нормальные ребята, но на самом деле они лодыри и ничего путного не делают. Это нужно для мокания соседних модулей, чтобы протестировать только функциональность выбранного набора модулей. Такие заглушки должны выглядеть подобающе, то есть полностью повторять апи замоканой сущности, но могут не делать никакой полезной работы. Поэтому можно в этом апи сделать безымянные параметры, чтобы еще раз подчеркнуть, что они не используются.
💥 Иногда существующие сущности в коде требуют коллбэки определенного вида. И вам в своем коллбэке возможно не нужно использовать весь набор параметров. Но для соблюдения апи вы должны их указать в сигнатуре своего обратного вызова. В этом случае можно сделать эти параметры безымянными.
💥 Иногда в иерархии полиморфных классов в конкретном наследнике вам не нужны все параметры виртуальной функции. Но для поддержания корректности переопределения виртуального интерфейса вы должны включить все параметры в сигнатуру метода. Опять же, неиспользуемые параметры можно пометить безымянными.
💥 Знаменитая перегрузка постфиксного оператора инкремента/декремента. Есть 2 вида этих операторов: префикстный и постфиксный. Проблема в том, что это все еще вызов функции operator++. Как различить реализации этих функций? Правильно, нужна перегрузка. Вот здесь и приходит на помощь безымянный параметр: в коде он не нужен, но влияет на выбор конкретной перегрузки. Выглядит это так:
struct Digit
{
Digit(int digit=0) : m_digit{digit} {}
Digit& operator++(); // prefix has no parameter
Digit operator++(int); // postfix has an int parameter
private:
int m_digit{};
};
В целом, эта фича нужна либо для соблюдения существующего апи, либо для того, чтобы при вызове функции гарантировано вызвалась правильная перегрузка.
Stay useful. Stay cool.
Please open Telegram to view this post
VIEW IN TELEGRAM
•
push_back
— добавляет копию переданного объекта в конец вектора, вызывая конструктор копирования.•
emplace_back
— создает объект прямо в конце вектора на месте, избегая копирования и вызывая конструктор с переданными аргументами.🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Удаляем элемент из ассоциативного контейнера по значению
Понимаю, что искать элементы ассоциативного контейнера предполагается чисто по ключу. Иначе зачем бы мы использовали этот тип контейнера?
Но вот бывают иногда случаи, когда под вашу задачу очень хорошо подходит мапа, но, чтобы держать ее в консистентном состоянии, вам нужно иногда удалять элементы по значению.
Не все хотят тянуть себе в проект какой-нибудь буст с его bimap или прочие сторонние решения. Хочется чего-нибудь стандартного. Понятное дело, что это не будет эффективно и удалять мы будем за линейное время. Но все же...
У ассоциативных контейнеров есть только один метод на удаление элементов - erase. Он принимает либо итератор, либо ключ. И нет такой перегрузки, которая бы как-то на значение смотрела. То есть нужно делать так:
Две строчки на идейно очень простое и понятное действие. Ох, если бы был метод erase_if...
И вы знаете, в С++20 появились перегрузки свободной функции std::erase_if для каждого стандартного контейнера. Теперь можно написать просто вот так:
И результат вывода будет таким же.
У кого есть только древние плюсы - не переживайте. Для вас эти перегрузки реализовали в экспериментальной библиотеке. Просто сделайте так:
И все заработает.
Do things easier. Stay cool.
#STL #cpp20
Понимаю, что искать элементы ассоциативного контейнера предполагается чисто по ключу. Иначе зачем бы мы использовали этот тип контейнера?
Но вот бывают иногда случаи, когда под вашу задачу очень хорошо подходит мапа, но, чтобы держать ее в консистентном состоянии, вам нужно иногда удалять элементы по значению.
Не все хотят тянуть себе в проект какой-нибудь буст с его bimap или прочие сторонние решения. Хочется чего-нибудь стандартного. Понятное дело, что это не будет эффективно и удалять мы будем за линейное время. Но все же...
У ассоциативных контейнеров есть только один метод на удаление элементов - erase. Он принимает либо итератор, либо ключ. И нет такой перегрузки, которая бы как-то на значение смотрела. То есть нужно делать так:
std::map<int, int> map{{1, 6}, {2, 7}, {3, 8}, {4, 9}, {5, 10}};
// вот так
auto it = std::find_if(map.begin(), map.end(), [](const auto& elem) {return elem.second == 10;});
map.erase(it);
//
std::for_each(map.begin(), map.end(), [](const auto& item){
std::cout << item.first << " " << item.second << std::endl;});
// OUTPUT
// 1 6
// 2 7
// 3 8
// 4 9
Две строчки на идейно очень простое и понятное действие. Ох, если бы был метод erase_if...
И вы знаете, в С++20 появились перегрузки свободной функции std::erase_if для каждого стандартного контейнера. Теперь можно написать просто вот так:
std::erase_if(map, [](const auto& elem) {return elem.second == 10;});
И результат вывода будет таким же.
У кого есть только древние плюсы - не переживайте. Для вас эти перегрузки реализовали в экспериментальной библиотеке. Просто сделайте так:
#include <experimental/map>
std::experimental::erase_if(map, [](const auto& elem) {return elem.second == 10;});
И все заработает.
Do things easier. Stay cool.
#STL #cpp20
Важный аспект программирования на C++, так как язык предоставляет разработчику возможность контролировать выделение и освобождение памяти.
Основные моменты:
• Выделение памяти — new для выделения памяти в динамической памяти.
• Освобождение памяти — delete для освобождения выделенной памяти.
• Массивы — Для массивов используйте new[] и delete[].
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
C/C++ Ready | Программирование
Авторский канал по разработке на C и C++.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Автор: @energy_it
Реклама на бирже: https://telega.in/c/cpp_ready
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Автор: @energy_it
Реклама на бирже: https://telega.in/c/cpp_ready
🤯1🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
codechef — на платформе доступно множество языков программирования, в том числе и C++. Задачи можно решать прямо в редакторе кода, а встроенный AI-ассистент поможет найти и исправить ошибку в коде.
📌 Ссылочка: https://www.codechef.com/learn
📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
Modern C++ for Absolute Beginners
Автор: Slobodan Dmitrović
Год издания: 2023
#cpp #en #2O23
Скачать книгу
Автор: Slobodan Dmitrović
Год издания: 2023
#cpp #en #2O23
Скачать книгу
👍2