Senior C++ Developer @seniorcpp Channel on Telegram

Senior C++ Developer

@seniorcpp


№ 4931128893
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr

Senior C++ Developer (Russian)

Вы когда-нибудь задумывались о том, как стать опытным и успешным разработчиком на языке программирования C++? Тогда канал "Senior C++ Developer" (@seniorcpp) именно для вас! Здесь вы сможете глубоко погрузиться в мир C++, изучать его особенности, узнавать о новых технологиях и методах программирования.

Канал предназначен для всех, кто уже имеет базовые знания C++ и хочет расширить свои навыки, стать профессионалом в этой области. Мы регулярно публикуем обучающие материалы, статьи, видеоуроки и примеры кода, которые помогут вам улучшить свои навыки программирования на C++.

У нас вы также найдете информацию о вакансиях для Senior C++ Developer, возможности для карьерного роста и сотрудничества. Если у вас возникли вопросы или предложения по сотрудничеству, не стесняйтесь обращаться к администратору канала по контакту @adv_and_pr.

Присоединяйтесь к каналу "Senior C++ Developer" сегодня и станьте экспертом в разработке на C++!

Senior C++ Developer

28 Jan, 20:52


Поиск в ширину

Поиск в ширину (breadth-first search, BFS) - это алгоритм поиска или обхода графа. Он исследует все вершины на одном уровне, прежде чем переходить к следующему уровню.

Этот пример иллюстрирует обход в ширину для следующего графа:
0
/ \
1-----2
\
3
Начиная с вершины 2, алгоритм BFS посетит вершины в следующем порядке: 2, 0, 3, 1.

Senior C++ Developer

28 Jan, 14:25


#вакансия #удалённо #parttime #remote #parttime #C++ #преподаватель

🦉  OTUS ищет преподавателей на онлайн-курсы:
С++ Developer Basic
С++ Developer Professional

Мы расширяем команду экспертов (уже более 600 человек). Преподавательский опыт не обязателен — мы научим вас всему, что нужно!

Требуется:
- Знание С++17, STL, ООП, Git, опыт коммерческой разработки на C++ от 3 лет, понимание RAII, SOLID, SFINAE. Опыт многопоточного и асинхронного программирования.

Обязанности:
- подготовиться к занятиям (темы на выбор, материалы предоставляются)
- преподавать в mts-link.ru, уделяя большое внимание практике. Здесь вы сможете развивать навыки публичных выступлений, работы с аудиторией и подачи обратной связи.

Условия:
гибкий график, легко совмещать с основной работой, занятия в вечернее время;
  оплата от 4000 до 6000 руб. за 1,5 часа занятия;
бонусы: доступ к нашим курсам, нетворкинг, развитие личного бренда, бесплатные воркшопы и конференции для наших преподавателей.

Обсудить подробнее: @candyfox24

Senior C++ Developer

28 Jan, 13:23


Волновой алгоритм

Волновой алгоритм — это алгоритм поиска пути, который использует волновое распространение для определения кратчайшего пути от начальной вершины до целевой вершины.

Смотреть статью

Senior C++ Developer

27 Jan, 20:24


Что такое виртуальный деструктор и зачем он используется в C++?

В C++ виртуальный деструктор используется для правильного освобождения памяти при удалении объекта через указатель на базовый класс. Если базовый класс имеет виртуальный деструктор, то при удалении объекта через указатель на базовый класс будет вызван деструктор не только базового класса, но и всех его производных классов. Это позволяет избежать утечек памяти и неопределенного поведения при работе с полиморфными объектами.

Если виртуального деструктора не объявлено в базовом классе, то при удалении производного объекта через указатель на базовый класс будут вызываны только деструкторы базового класса, что может привести к утечкам памяти и неопределенному поведению.

Senior C++ Developer

26 Jan, 18:43


Пример оконного приложения на C++ Qt

В программе окно создается на основе библиотечного класса QFrame. Этот класс является потомком класса QWidget. Так что можно без всяких проблем заменить в программе QFrame на QWidget.

Подробнее можно почитать здесь.

Senior C++ Developer

23 Jan, 20:24


#вопросы_с_собеседований
Предполагая, что buf является валидным указателем, в чем проблема в приведенном на картинке коде? Каким был бы альтернативный способ реализации этого, который позволил бы избежать этой проблемы?

Проблема в коде заключается в том, что --sz >= 0 всегда будет истинным, поэтому вы никогда не выйдете из цикла while (поэтому вы, вероятно, в конечном итоге испортите память или вызовете какое-то нарушение памяти или какой-либо другой программный сбой, в зависимости от того, что вы делаете внутри цикла). Причина, по которой --sz >= 0 всегда будет истинной, заключается в том, что тип sz равен size_t. size_t на самом деле просто псевдоним одного из основных беззнаковых целочисленных типов. Следовательно, поскольку sz не имеет знака, оно никогда не может быть меньше нуля (поэтому условие никогда не может быть ложным). Одним из примеров альтернативной реализации, позволяющей избежать этой проблемы, может быть использование цикла for следующим образом:
for (size_t i = 0; i < sz; i++)

Senior C++ Developer

23 Jan, 17:16


Мечтаешь о той самой работе в Big Tech, но никогда не проектировал системы? Или работаешь на галере с нулевым подходом к проектированию и не знаешь, а как разбираться в архитектуре приложений?

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

Я решил с этим покончить. Больше никаких недо-курсов, которые “готовят к собесу за один месяц с нуля”. Это невозможно, если ты не обладаешь базой. Но все реально, если разобраться в компонентах, которые составляют эти системы.

Приходи на мой Открытый Урок, где за час мы посмотрим на эти самые компоненты. А еще я расскажу про процесс проектирования в Big Tech и что такое system design секция.

В конце лекции анонс продукта, который поможет тебе навсегда решить проблему с проектированием.

ЗАПИСАТЬСЯ

PS: недавно проходил собес в один российский Big Tech. Результат можешь увидеть на скрине

Senior C++ Developer

23 Jan, 15:02


std::thread

std::thread является частью стандартной библиотеки C++ и предоставляет возможность создания и управления потоками выполнения.
Он позволяет запускать функции в отдельных потоках, обеспечивая параллельное выполнение кода.

Обратите внимание, что после создания потока std::thread, вы должны вызвать join() или detach() для корректной обработки завершения потока.

В приведенном примере мы использовали join(), чтобы основной поток дождался завершения потока t1. Если вы вызываете join() после завершения потока, программа может выдать исключение или вызвать неопределенное поведение.

Senior C++ Developer

23 Jan, 09:19


👩‍💻 Ваш код на C++ мог бы быть быстрее. Намного быстрее.

Почему ваши приложения работают медленнее, чем хотелось бы? Программа не использует потенциал процессора, а кэш и память работают в авральном режиме?

🗓 На открытом уроке «Оптимизация производительности на C++» 30 января в 20:00 мск мы разберем инструменты gprof, valgrind, Google Benchmark, секреты работы с кэш-памятью, управление памятью и даже оптимизации компилятора.

🦾 Присоединяйтесь к вебинару и сделайте свои приложения молниеносными!
Участники урока получат скидку на большое обучение «C++ Developer. Professional».

➡️ Узнать больше и зарегистрироваться: https://otus.pw/1j0R/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Senior C++ Developer

22 Jan, 18:34


Начало работы с Qt

Минимальный исходный код приложения Qt(часть 1).

QApplication — очень важный класс. Он заботится о входных аргументах, а также о многих других вещах, и в первую очередь о цикле обработки событий . Цикл событий — это цикл, ожидающий ввода данных пользователем в приложениях с графическим интерфейсом.

Давайте скомпилируем это приложение. Нажав на зеленую стрелку в левом нижнем углу, Qt Creator скомпилирует и выполнит его.

И что случилось? Приложение как бы запущено и не отвечает. Это на самом деле нормально. Цикл событий работает и ожидает событий, таких как щелчки мышью в графическом интерфейсе, но мы не предоставили никаких событий для обработки, поэтому он будет выполняться бесконечно.

Давайте добавим что-то для отображения(часть 2). Скомпилируйте его и… вот оно! Наше первое окно!

Senior C++ Developer

21 Jan, 19:54


Нейронные сети на Эльбрусе

Смотреть статью

Senior C++ Developer

20 Jan, 18:34


Задача

Найти среднее арифметическое в трех рядах.

Для начала продумаем наше решение. Сразу условимся что длинна ряда у нас будет 5 . Хотите ставьте своё число. Нам надо найти среднее арифметическое в трех рядах, и в каждом по отдельности, т.е. мы сначала сделаем цикл для рядов, а потом в этом цикле сделаем еще один цикл только уже для чисел этого ряда.

Теперь подумаем какие переменные нам понадобятся :

Переменная summa — для суммы чисел каждого ряда
Переменная average — для среднего арифметического каждого ряда
Переменная number — обычное число которое мы будем постоянно прибавлять
Переменные i и j — для циклов, перпенные у нас будут локальные, т.е. использоваться и объявляться и цикле.

Senior C++ Developer

19 Jan, 18:41


#вопросы_с_собеседований
В чем разница между git fetch и git pull?

Разница между этими командами заключается в том, что когда вы используете команду git fetch, Git извлекает последние изменения из удаленного репозитория в ваш локальный репозиторий, но оставляет эти изменения в отдельной ветке git origin.

А команда git pull извлекает и интегрирует (скачивает и сливает) последние изменения из удаленного репозитория в вашу текущую ветку работы.

Senior C++ Developer

18 Jan, 20:47


Ключевое слово requires

Ключевое слово requires используется в контексте концепций (concepts) для определения требований, которые тип должен удовлетворять. Концепции представляют собой инструмент в C++, введенный в стандарте C++20, который позволяет более точно указывать ограничения на типы данных, которые могут использоваться в шаблонах.

В примере на картинке Sortable — это концепция, описывающая типы, для которых определены операторы сравнения («<» и «>»). Функция sortAndPrint принимает два аргумента типа T, удовлетворяющего концепции Sortable, и сравнивает их.

Использование requires в данном контексте позволяет более явно указать ограничения на типы данных, которые могут использоваться в шаблонах и функциях, делая код более читаемым и безопасным.

#для_начинающих

Senior C++ Developer

16 Jan, 18:47


Поиск максимальной прибыли

Дан целочисленный массив prices, где prices[i] - это цена данной акции на i-й день. В каждый день вы можете принять решение о покупке и/или продаже акции. В любой момент времени вы можете держать не более одной акции. Однако вы можете купить ее и тут же продать в тот же день. Найдите и верните максимальную прибыль, которую вы можете получить.

Рассмотрим принцип работы maxProfit:

curHold хранит максимальную потенциальную прибыль, если у нас есть акции, а curNotHold - если у нас нет акций.

Для каждой цены алгоритм обновляет значения переменных.
- curHold считается как максимум из двух значений: предыдущего curHold (если мы продолжаем держать акции) и разности между предыдущим curNotHold и текущей ценой на акции (если мы покупаем акции сегодня).
- curNotHold считается как максимум из двух значений: предыдущего curNotHold (если мы продолжаем не покупать акции) и суммы предыдущего curHold и текущей цены на акции (если мы продаем акции сегодня).

#разбор_кода

Senior C++ Developer

16 Jan, 16:04


Поговорим об observability на Яндекс Infra Meetup #4

Приглашаем на митап про наблюдаемость приложений от Яндекс Go и Техплатформы Екома и Райдтеха Яндекса. В программе два трека, выбрать можно любой: 

CaseLab: observability. Интерактивный формат решения практических задач совместно с модераторами. 

CaseStudy. 3 доклада от спикеров сервисов: 
— Толя Беляев расскажет про варианты сбора метрик приложения микросервисной архитектуры
— Леша Королев объяснит, как построить дашборд всей платформы Такси
— Леша Золотухин покажет, как создать диагностические дашборды в инфраструктуре на 2000+ микросервисов

После CaseLab и докладов — нетворкинг в неформальной атмосфере и афтепати.
13 февраля, 18:30
Москва, офлайн
Регистрируйтесь и зовите коллег!
 
Обратите внимание, количество мест ограничено. После регистрации обязательно дождитесь подтверждения заявки.

Senior C++ Developer

15 Jan, 15:43


#вопросы_с_собеседований
Почему рекомендуется не использовать паттерн Singleton?

Singleton гарантирует, что класс имеет только один экземпляр и обеспечивает глобальную точку доступа к нему.
Однако паттерн Singleton часто критикуют и не рекомендуют использовать по нескольким причинам:

1. Глобальное состояние: Singleton вносит глобальное состояние в приложение, что может привести к тесной связи между классами и затруднить рассуждения о поведении системы.

2. Скрытие зависимостей: Singleton скрывает зависимости, затрудняя понимание и рассуждения о взаимодействии между различными компонентами системы.

3. Сложности тестирования: Singleton может усложнить модульное тестирование. Поскольку он полагается на глобальное состояние, становится трудно изолировать и тестировать отдельные компоненты по отдельности. Это может привести к зависимостям и сделать тесты более хрупкими.

4. Безопасность потоков: Экземпляры Singleton могут создавать проблемы с безопасностью потоков. Если несколько потоков пытаются одновременно получить доступ или изменить Singleton, это может привести к неопределенному поведению. А дополнительное обеспечение безопасности потоков добавляет сложности и может повлиять на производительность.

Senior C++ Developer

14 Jan, 17:19


You Ain't Gonna Need It (YAGNI)

You Ain't Gonna Need It
(Вам это не понадобится) - это принцип разработки программного обеспечения, который поощряет простоту и избегает чрезмерной инженерии. принцип YAGNI побуждает разработчиков реализовывать только те функции, которые необходимы в данный момент, а не добавлять функциональность, которая может потребоваться в будущем, но в данный момент не нужна.

Вот ключевые аспекты применения принципа YAGNI:

- Минимализм: Пишите минимальный объем кода, необходимый для выполнения непосредственных требований.

- Избегайте спекулятивной разработки: Не реализуйте функции на основе спекулятивных будущих требований.

- Рефакторинг: Перерабатывайте код, чтобы удалить все ненужные или неиспользуемые функции. Это помогает сохранить код компактным и удобным для обслуживания.

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

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

Senior C++ Developer

13 Jan, 12:48


Curiously Recurring Template Pattern (CRTP)

CRTP
предполагает использование шаблонов и наследования для достижения формы статического полиморфизма. Он позволяет производному классу наследоваться от базового, который параметризуется самим производным классом в качестве аргумента шаблона.

В данном примере класс Base является шаблонным классом, который принимает производный класс (Derived1 или Derived2) в качестве аргумента шаблона. Класс Base предоставляет общую функциональность или интерфейс, который может быть настроен каждым производным классом.

Функция implementation() в базовом классе определяется как невиртуальная. Внутри функции implementation() используется static_cast<Derived*>(this) для приведения указателя к типу производного класса. Это позволяет каждому производному классу предоставлять свою собственную реализацию функции implementation().

Когда функция implementation() вызывается на экземпляре производного класса, она вызывает соответствующую реализацию в этом производном классе.

Senior C++ Developer

12 Jan, 15:35


LeetCode теперь в Telegram!

LeetCode — это сайт, который позволяет быстро готовиться к техническим собеседованиям по программированию. Там публикуются задачи с собеседований в Google и Microsoft с решениями.

Подписывайтесь: @leetcode

Senior C++ Developer

11 Jan, 19:36


std::any

Это функция C++17, которая предоставляет безопасный с точки зрения типов контейнер для единичных значений любого типа. Она позволяет хранить и манипулировать значениями разных типов в одном объекте, подобно std::variant. Однако, в отличие от std::variant, который требует явного указания допустимых типов, std::any может хранить значения любого типа.

Класс std::any является частью стандартной библиотеки C++ и определяется в заголовке <any>. std::any предоставляет функции, такие как type(), has_value(), reset(), emplace() и другие, которые позволяют манипулировать и запрашивать хранимое значение.

В этом примере мы создаем объект val, который может хранить значения любого типа. Мы присваиваем val различные значения и извлекаем их с помощью std::any_cast и проверки типа с помощью typeid.

Однако при попытке извлечь значение, используя неправильный тип (в данном случае std::any_cast<int>), возникает исключение std::bad_any_cast, которое можно обработать с помощью try-catch.

Senior C++ Developer

10 Jan, 20:42


47 Атрибутов Хорошего С-кода.

https://habr.com/ru/post/679256/

Senior C++ Developer

09 Jan, 19:35


Библиотечный метод

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

Формат входных данных:
На первой строке дано целое число n (1 ≤ n ≤ 100) – количество элементов в массиве. На второй строке задан сам массив: последовательность натуральных чисел, не превышающих 10^9.

Формат выходных данных:
В выходной файл выведите строки (по количеству вставок) по n чисел каждая.

Senior C++ Developer

07 Jan, 18:39


std::unordered_map

std::unordered_map - это контейнерный класс, который предоставляет структуру данных, известную как хэш-карта или хэш-таблица
. Он доступен начиная с C++11.

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

std::unordered_map в качестве ключей поддерживает встроенные типы, типы, определяемые пользователем, и даже структуры или классы.

- В этом примере мы создаем myMap, которая сопоставляет целые числа со строками.
- С помощью функции insert() вставляются 3 пары ключ-значение.
- Затем мы получаем доступ и печатаем значение, связанное с ключом 2, используя оператор [].
- С помощью функции erase() удаляем значение с ключом 3.
- Далее мы выполняем итерации по карте с помощью цикла for, чтобы вывести все пары ключ-значение.
- Наконец, мы используем функцию find(), чтобы проверить, существует ли ключ 2 в карте.

Senior C++ Developer

06 Jan, 18:20


Введение в разработку C++ в UE4

Это руководство покажет вам как писать код на С++ в Unreal Engine.

Смотреть статью

Senior C++ Developer

06 Jan, 15:01


⚡️ В сети начали массово сливать курсы и книги известных онлайн школ

Вот отсортированная база с тонной материала(постепенно пополняется):

БАЗА (4687 видео/книг):

(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(107 видео, 43 книги) — СисАналз
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — UI/UX
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — Ruby

Скачивать ничего не нужно — все выложили в Telegram

Senior C++ Developer

05 Jan, 18:49


#вопросы_с_собеседований
Что выведет код сверху?

Ответ: “Constructor called” 5 раз и затем “Destructor called” 5 раз.

В приведенной выше программе мы сначала инициировали переменные с пятью указателями, используя ключевое слово new, следовательно, после этого будет вызван конструктор fives time, поскольку мы используем delete[] (используется для удаления нескольких объектов) для удаления переменных, следовательно, все созданные пять объектов будут уничтожены и, следовательно, будет вызван деструктор five times.

Senior C++ Developer

04 Jan, 18:14


Сборщик мусора на С++

Смотреть статью

Senior C++ Developer

31 Dec, 23:06


с новым годом, любители С++ 😘

Senior C++ Developer

30 Dec, 16:54


Рисуем мультяшный взрыв за 180 строчек голого C++

Смотреть статью

Senior C++ Developer

28 Dec, 20:45


#вопросы_с_собеседований
Какой код выполняется до функции main?

Ответ:
Конструкторы глобальных объектов.

Senior C++ Developer

27 Dec, 20:48


Неклассические контейнеры в C++

https://habr.com/ru/post/664044/

Senior C++ Developer

26 Dec, 18:36


C++ Siberia 2021: Павел Филонов, Евгений Медведев, Собеседование онлайн

Смотреть онлайн

Senior C++ Developer

25 Dec, 20:06


std::async

В C++ std::async - это шаблон функции, предоставляемый стандартной библиотекой <future>. Он используется для асинхронного выполнения функции или вызываемого объекта и получения объекта future, представляющего результат вычислений.

Функция std::async создает новый поток или использует существующий поток из пула потоков реализации для выполнения поставленной задачи. Она возвращает объект std::future, который можно использовать для получения результата или статуса вычисления.

В этом примере функция AddNumbers выполняется асинхронно с использованием std::async. Она принимает два целых числа в качестве аргументов и возвращает их сумму. Функция std::async вызывается с помощью AddNumbers и аргументов 5 и 10.
Функция std::async возвращает объект std::future<int>, который представляет собой результат вычисления. Вызывая функцию get() на объекте future, мы блокируем выполнение до завершения вычислений и получаем результат.

Senior C++ Developer

24 Dec, 18:57


std::atomic_flag

std::atomic_flag является классом для реализации простой атомарной флаговой переменной. Он предоставляет механизм безопасной работы с флагом в многопоточной среде без необходимости использования блокировок.

std::atomic_flag имеет два основных метода: test_and_set() и clear():

Метод test_and_set() устанавливает флаг в "истину" и возвращает предыдущее значение флага. Если флаг уже был установлен, вызов test_and_set() вернет true, в противном случае он вернет false.
Метод clear() сбрасывает флаг в "ложь".

В этом примере создаются два потока workerThread1 и workerThread2, которые пытаются получить доступ к защищенному блоку кода. Флаг flag инициализируется значением true с помощью ATOMIC_FLAG_INIT. В цикле worker() каждый поток пытается вызвать test_and_set() для захвата флага. Если флаг уже установлен, поток ждет и повторно пытается его захватить. Когда флаг наконец захватывается, поток выполняет некоторую работу и вызывает clear() для освобождения флага.

Senior C++ Developer

23 Dec, 20:34


Лямбда-функция

Лямбда-функция (или просто лямбда) — это анонимная функция в C++, которая может быть определена непосредственно внутри кода. Лямбда-функции предоставляют более компактный и удобный способ создания небольших функций на лету, без необходимости объявления их отдельно.

Лямбда-функции также часто используются вместе с алгоритмами стандартной библиотеки C++, такими как std::for_each, std::transform, std::sort (как на примере выше), и другими, чтобы создавать более компактный и выразительный код.

#для_начинающих

Senior C++ Developer

22 Dec, 19:26


Memento

Memento — это поведенческий паттерн проектирования, который позволяет сохранять и восстанавливать внутреннее состояние объекта без нарушения инкапсуляции. Он полезен, например, когда вам нужно реализовать функциональность отмены/возврата действий или сохранения состояния объекта для последующего восстановления.

#для_продвинутых

Senior C++ Developer

21 Dec, 17:19


Семантика перемещения

Семантика перемещения позволяет эффективно перемещать ресурсы между объектами без копирования данных. Это понятие стало особенно актуальным в свете улучшений, внесенных в язык C++11 и последующих стандартах.

Семантика перемещения решает проблемы, связанные с копированием больших данных или ресурсов, что может быть очень затратным по времени и памяти. Вместо копирования данные «перемещаются» из одного объекта в другой, при этом исходный объект теряет право владения этими данными. Это осуществляется с использованием специальных методов и операторов, таких как конструктор перемещения (move constructor) и оператор перемещения (move assignment operator).

Senior C++ Developer

20 Dec, 18:33


Как работает std::unique_ptr?

std::unique_ptr — это умный указатель (smart pointer), предназначенный для управления динамически выделенными объектами. Он обеспечивает автоматическое освобождение памяти при выходе объекта из области видимости или при необходимости.

Принцип работы std::unique_ptr заключается в том, что он владеет указателем на выделенную память и следит за временем жизни этой памяти. Когда объект std::unique_ptr выходит из области видимости, он автоматически освобождает память, на которую он указывает, путем вызова оператора delete для хранящегося указателя.

Senior C++ Developer

19 Dec, 18:18


Абстрактная фабрика

Абстрактная фабрика (Abstract Factory) — это паттерн проектирования, который позволяет создавать семейства связанных объектов без указания их конкретных классов. Этот паттерн позволяет создавать объекты, которые взаимодействуют друг с другом и предназначены для работы вместе, но без явной зависимости от конкретных классов.

Senior C++ Developer

18 Dec, 18:02


Виртуальные функции

Виртуальные функции — это механизм, позволяющий создавать функции в базовом классе, которые могут быть переопределены в производных классах. Основная идея заключается в том, что виртуальные функции могут вызывать методы из объектов производных классов через указатели или ссылки на базовый класс, и при этом будет вызвана та версия функции, которая соответствует реальному типу объекта.

Чтобы объявить функцию виртуальной, необходимо использовать ключевое слово virtual в определении функции в базовом классе. Производные классы могут переопределять виртуальные функции с помощью того же ключевого слова virtual. Таким образом, при вызове виртуальной функции через указатель или ссылку на базовый класс будет вызвана версия функции из реального типа объекта.

Senior C++ Developer

17 Dec, 10:55


Перегрузка функций

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

Таким образом можно создать несколько вариантов функции, которые выполняют аналогичные действия, но принимают разные типы аргументов. Это позволяет создавать более удобный и интуитивно понятный интерфейс для программистов, так как они могут вызывать одно и то же имя функции с разными типами данных, не заботясь о различиях в именах функций.

Senior C++ Developer

16 Dec, 19:23


Что такое memory leak?

Memory leak (утечка памяти) — это ситуация, при которой программа использует динамическую память, но забывает освободить эту память перед завершением работы или перед повторным использованием. Как результат, выделенная память остается занята в оперативной памяти, несмотря на то, что она уже не используется, и таким образом происходит утечка памяти.

Утечка памяти может привести к постепенному увеличению объема занятой оперативной памяти программой. Если утечка продолжает развиваться, это может привести к уменьшению производительности программы и даже к завершению программы из-за нехватки доступной памяти.

Senior C++ Developer

16 Dec, 15:04


Знаете, что делает код на C++ мощным? Правильная работа с библиотеками!

👉 Если вы хотите стать востребованным C++ разработчиком, пора прокачивать навыки работы с библиотеками. Это ваш ключ к написанию профессионального и оптимизированного кода!

Что вас ждет на открытом уроке:
- узнаете, какие бывают библиотеки и чем они отличаются;
- научитесь подключать сторонние библиотеки и собирать свои;
- поймете, как библиотеки упрощают вашу работу и делают код эффективнее.

⭐️ Спикер Денис Злобин — старший инженер-программист в Astra Linux, опытный наставник разработчиков.

18 декабря в 19:00 мск. Для начинающих и Junior-разработчиков, готовых к карьерному росту. Вебинар проходит в преддверии старта курса «C++ Developer», участники урока получат скидку на большое обучение.

👉 Для участия зарегистрируйтесь: https://otus.pw/q5mM/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Senior C++ Developer

16 Dec, 13:04


Константные методы

В C++, ключевое слово const имеет различное значение в зависимости от контекста. Оно может быть применено к методам классов для указания, что метод не будет изменять состояние объекта, на котором он вызывается. Такие методы называются «константными методами».

Когда вы вызываете константный метод для объекта класса, компилятор гарантирует, что внутри этого метода вы не будете изменять члены данных объекта, кроме членов, объявленных как mutable (они могут изменяться внутри константных методов).

Senior C++ Developer

15 Dec, 19:45


std::initializer_list

Присваивайте значения контейнерам непосредственно с помощью списка инициализаторов, как это можно делать с C-массивами.

Это справедливо и для вложенных контейнеров. Скажите спасибо С++11.

Senior C++ Developer

14 Dec, 17:21


Использование выражений сгиба

С C++17 мы можем использовать складывать выражения для объединения последовательности std::arrays, это элегантное и эффективное решение продемонстрировано выше.

Senior C++ Developer

13 Dec, 19:17


memmove

Функция memmove используется для копирования блока памяти из одного места в другое. Она объявлена в заголовочном файле <cstring>. Она принимает аргументы типа void * и const void *, что позволяет ей работать с любыми типами данных. Она просто копирует указанное количество байтов из исходного буфера в целевой.

memmove может обрабатывать перекрывающиеся буферы. В отличие от memcpy, которая просто копирует данные из одного места в другое, memmove может безопасно перемещать данные, даже если исходный и целевой буферы перекрываются.

Функция memmove может быть полезна для удаления элементов из массива. Например, если вы хотите удалить элемент из массива и сдвинуть оставшиеся элементы влево, вы можете использовать memmove для перемещения данных в массиве.

Senior C++ Developer

12 Dec, 20:38


#вопросы_с_собеседований
Как работает оператор new в C++ и почему используется именно этот оператор для выделения динамической памяти?

Оператор new используется в C++ для выделения динамической памяти (heap memory), которая выделяется во время выполнения программы. При его вызове, сначала выделяется необходимое количество памяти из операционной системы, а затем возвращается указатель на эту область памяти.

При исполнении оператора new происходит следующее:
1. Сначала он выделяет память в размере, указанном в аргументе оператора или размере типа данных, на который указывает указатель.
2. Затем он вызывает конструктор для создания объекта в выделенной области памяти.
3. Возвращает указатель на выделенную память.

Оператор new является предпочтительным для выделения памяти по сравнению с функцией malloc в C, поскольку он позволяет при выделении памяти автоматически вызывать конструкторы объектов. С использованием оператора new не нужно явно выделять память под объекты и вызывать конструкторы отдельно.

В данном примере оператор new выделяет память под объект класса MyClass и вызывает его конструктор. Оператор delete используется для освобождения ранее выделенной памяти.

Senior C++ Developer

12 Dec, 15:39


Подробно рассказываем о высокопроизводительных решениях с фреймворком userver на новом бесплатном вебинаре!

Он предназначен для создания надежных и молниеносных микросервисов и веб-серверов. Освойте передовой C++ фреймворк всего за 90 минут!

 Вы узнаете:
- Уникальные архитектурные особенности и преимущества userver, которые сделают вашу работу легче и эффективнее.
- Как быстро настроить окружение и запустить свой первый проект, не тратя лишнего времени.
- Советы высококлассных профессионалов по работе с асинхронностью, которые помогут вам стать мастером своего дела и очень много другой полезной сочной информации!

💡 Будет особенно интересно:
- C++ разработчикам, стремящимся освоить мощный инструмент для создания микросервисов.
- Backend-инженерам и Team Lead'ам, ищущим высокопроизводительные решения для своих задач.
- Специалистам, работающим над масштабируемыми системами.

Получите практический и ценный опыт работы с userver, который можно сразу применить в своих проектах - регистрируйтесь по ссылке: https://otus.pw/Ez3k/

P.S. Все зарегистрированные участники получат приличную скидку на обновленный топовый курс «C++ Developer. Professional»

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Senior C++ Developer

12 Dec, 15:29


Является ли число степенью двойки

Мы можем проверить, является ли число степенью двойки или нет напрямую, используя код выше.

Senior C++ Developer

12 Dec, 12:25


Курс «Реверсивный инжиниринг ПО под ОС Windows» стартует 16 декабря!

В курсе подробно рассматривается синтаксис Ассемблера, анализ приложений различного уровня сложности, от простейших crackme до полноценных программ на современных архитектурах.
Необходимые знания: язык Ассемблера, С/С++, python, навыки работы с IDA и другими инструментами для реверса

Вы получите сертификат/удостоверение о повышении квалификации

@Codeby_Academy
Узнать подробнее о курсе

Senior C++ Developer

04 Dec, 18:50


Алгоритм set_intersection

Создает отсортированную последовательность из элементов, встречающихся в обеих последовательностях – [first1, last1) и [first2, last2).

Senior C++ Developer

04 Dec, 16:42


👍Узнайте, как писать чистый, поддерживаемый код на Си с использованием функциональных подходов!

Начните на бесплатном уроке онлайн-курса «Программист С» — «Функциональное программирование на языке Си»: регистрация

На занятии изучим:
- функциональное программирование в C: от теории к практике
- продвинутые техники работы с функциями в C: указатели, замыкания и оптимизации
- глубокое погружение в рекурсию и её оптимизацию на низком уровне
- современные расширения компиляторов для чистого и эффективного кода

В результате получите:
- понимание базовых концепций функционального программирования в контексте C
- знание различных способов реализации функций высшего порядка и замыканий
- представление об оптимизации рекурсивных функций

🔥После вебинара вы сможете продолжить обучение на курсе по спеццене, в том числе, в рассрочку.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Senior C++ Developer

04 Dec, 16:32


Объясните на примере что такое хеш-функция?

Хеш-функция - это функция, которая принимает на вход некоторые данные и возвращает фиксированный размер выходных данных, называемый хешем. Такие функции широко используются в C++ для решения задач с поиском и индексированием данных. Они позволяют быстро находить элементы в массивах или хранилищах данных.

Рассмотрим применение на примере кода выше:
Мы создаем объект хеш-функции для строки и используем его для вычисления хеша для строки "Hello, world!". Результатом выполнения программы будет вывод на экран хеш-значения для этой строки.

Senior C++ Developer

04 Dec, 14:31


Как связать микросервисы так, чтобы они работали идеально?

Синхронное взаимодействие или асинхронное? REST или Kafka? На открытом уроке разберём, какой подход нужен именно вашему проекту.

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

Спикер Евгений Непомнящий — опытный разработчик и преподаватель.

🔴 Записывайтесь на открытый вебинар 16 декабря в 20:00 мск и получите скидку на большое обучение «Microservice Architecture»: https://otus.pw/ZTl1/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Senior C++ Developer

04 Dec, 14:31


Серия видеоуроков по созданию игры на C++

Смотреть видео

Senior C++ Developer

03 Dec, 20:29


Используем модель нейросети на C++

Смотреть статью

Senior C++ Developer

02 Dec, 18:25


Метод find_last_not_of

Ищет в данной строке последнее появление символа, отличного от символов строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.

Senior C++ Developer

01 Dec, 20:05


Просмотр все файлов в папке с помощью C++

Для того, чтобы просмотреть все файлы в папке с помощью C++, можно использовать функцию std::filesystem::directory_iterator(). Данная функция позволяет перебирать все файлы в указанной директории.

В данном примере мы получаем текущую директорию с помощью функции fs::current_path(), а затем проходим по всем файлам в этой директории с помощью цикла for. Внутри цикла мы выводим путь к каждому файлу с помощью метода entry.path().

Senior C++ Developer

30 Nov, 11:04


Метод difftime()

Метод difftime() используется для вычисления разницы между двумя значениями времени в секундах.

Подробнее можно почитать здесь.

Senior C++ Developer

28 Nov, 16:22


Метод wcscmp()

Функция wcscmp() определена в заголовочном файле cwchar.h . Функция wcscmp() используется для сравнения двух широких строк, заканчивающихся нулем, и это сравнение выполняется лексикографически.

Подробнее можно почитать здесь.

Senior C++ Developer

27 Nov, 20:49


Алгоритм copy_if

Копирует из диапазона элементов те элементы, проверка которых на соответствие заданному условию дает значение true.

Senior C++ Developer

27 Nov, 14:57


Хотите создавать идеальные C++ API, которые не ломаются на первой же нагрузке?

👉 Тогда не пропустите этот бесплатный вебинар! 3 декабря в 20:00 мск — открытый урок, который кардинально изменит ваш подход к проектированию API на C++!

**Что вас ждет?**
- Понимание плохого и хорошего API: как отличить чудовищное API от шедевра?
- Умение правильно именовать сущности и разбивать их на атомарные элементы. Прокачаем навыки, чтобы не было «кучи кода» и «головной боли».
- Идеи data-oriented подхода для создания API в высоконагруженных приложениях.

**Кому это будет полезно?**
- Разработчикам, кто только знакомится с C++ или переходит с других языков.
- C++-программистам, которые хотят прокачать свои навыки разработки API.

Вы научитесь проектировать удобный, стабильный и эффективный API для C++, который будет работать как часы.

⭐️ Спикер Андрей Рыжиков — разработчик в НИИ обработки аэрокосмических изображений.

Успейте записаться на открытый урок и получите скидку на большое обучение «C++ Developer».

Для участия зарегистрируйтесь: https://otus.pw/NVwT/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Senior C++ Developer

27 Nov, 14:34


⚙️ std::adjacent_find

В C++ функция std::adjacent_find из заголовка <algorithm> ищет первый элемент в контейнере, который имеет соседний элемент с таким же значением или удовлетворяет заданному условию. Это удобно для обнаружения повторений или паттернов.

Senior C++ Developer

26 Nov, 20:00


⚙️ std::set_intersection

В C++ функция std::set_intersection из заголовка <algorithm> позволяет найти пересечение двух отсортированных контейнеров. Результат записывается в другой контейнер.

Senior C++ Developer

26 Nov, 16:29


7–8 декабря проводим Weekend Offer Analytics

Устроиться в Яндекс за выходные — реально. Ищем крутых аналитиков с опытом работы от 2 лет на Python или C++, готовых работать в офисном или гибридном режиме на территории России или Республики Беларусь.

Подавайте заявку до 4 декабря — и всего за 2 дня пройдите все технические собеседования. После сможете пообщаться с семью нанимающими командами и выбрать ту, которая покажется самой интересной. Если всё сложится хорошо, сразу же пришлём вам офер.

Узнать подробности и зарегистрироваться.

Senior C++ Developer

26 Nov, 16:25


⚙️ std::vector::resize

В C++ метод std::vector::resize изменяет размер вектора. Если новый размер больше текущего, добавляются элементы с дефолтным значением. Если меньше — лишние элементы удаляются.

Senior C++ Developer

26 Nov, 14:24


🚀 Митап по C++ — в центре внимания ключевые аспекты разработки!

✔️ Применение паттернов ООП в современных C++ проектах — Костя Крюков, YADRO
Поговорим о сочетании производительности и гибкости в реальных проектах C++.

✔️ Void me — Сергей Кушниренко, Forgotten Empires (Microsoft Game Studios)
Разберём проблемы типа void в тестах и альтернативные решения.

✔️ Обзор build-системы LightForge — Сергей Струков, YADRO
Сравним LightForge с Make, CMake и Bazel, обсудим её преимущества.

✔️ Сериализация сложных структур данных с помощью jsoncpp — Константин Селезнёв, РЕЛЭКС
Создание удобной надстройки для работы с JSON в сложных проектах.

✔️ Статический анализ: что? как? зачем? Евгений Феклин, PVS-Studio
Как писать безопасный и качественный код с помощью статического анализа.

Модератор: Алексей Кузнецов, VK
Эксперт: Илья Казаков, YADRO



🗓 28 ноября, начало в 19:00 мск, Четверг

🌐 ОНЛАЙН

Регистрация на мероприятие

Senior C++ Developer

26 Nov, 14:18


➡️ Использование алиасов для длинных типов

Это позволяет значительно упростить код, сделать его более читаемым и легким для поддержки.

Например:
typedef std::vector<std::string> StrVector;

Senior C++ Developer

24 Nov, 18:30


⚙️ std::ceil и std::floor

В C++ функции std::ceil и std::floor из заголовка <cmath> используются для округления числа вверх или вниз до ближайшего целого. Это полезно для контроля направления округления.

Senior C++ Developer

21 Nov, 15:01


👍Как применить принципы ООП в языке С для создания сложных программ?

Узнайте на бесплатном уроке онлайн-курса «Программист С» — «Язык Cи и ООП: пошаговая разработка видеоплеера»: регистрация

Разберем практический пример разработки видеоплеера с использованием объектно-ориентированного подхода:
- узнаете особенности реализации ООП в языке С
- рассмотрим проектирование архитектуры видеоплеера: от интерфейсов к реализации
- проведем практику: пошаговая разработка основных компонентов плеера.

Также будет обработка ошибок и управление памятью в объектно-ориентированном стиле; live-coding: демонстрация работы с форматами видео и аудио в С.

В результате получите:
- готовый прототип видеоплеера на С с использованием ООП подходов и практические навыки применения паттернов проектирования в Си.

🔥После вебинара вы сможете продолжить обучение на курсе по спеццене, в том числе, в рассрочку.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Senior C++ Developer

20 Nov, 14:22


⚙️ std::rotate

Функция std::rotate из заголовка циклически перемещает элементы в контейнере. Это удобно для сдвига массива или перестановки элементов.

Senior C++ Developer

19 Nov, 14:32


⚙️ std::set

Класс std::set из заголовка <set> представляет собой контейнер, хранящий уникальные элементы в отсортированном порядке. Это удобно для работы с множествами или быстрого поиска.

Senior C++ Developer

19 Nov, 12:30


Как управлять памятью без лишних головных болей? Rust предлагает уникальные инструменты безопасности, и мы покажем, как это работает в реальных проектах!

На открытом вебинаре 19 ноября в 20:00 мск разберем умные указатели, interior mutability и деструкторы, научимся избегать типичных ошибок с динамической памятью и писать код, который производителен и безопасен.

Хватит бороться с утечками памяти и некорректными указателями! Освойте Rust и научитесь создавать сложные и безопасные структуры данных, которые ценятся в профессиональной разработке. А с поддержкой опытных экспертов и дипломом OTUS ваш резюме станет еще сильнее.

Регистрируйтесь на вебинар прямо сейчас и получите скидку на большое обучение «Rust Developer. Basic».

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Senior C++ Developer

19 Nov, 11:03


⚙️ std::priority_queue

В C++ класс std::priority_queue из заголовка <queue> представляет собой контейнер с приоритетной очередью. Элементы извлекаются в порядке приоритета — по умолчанию, от большего к меньшему.

Senior C++ Developer

18 Nov, 15:31


⚙️ std::lower_bound и std::upper_bound

Функции std::lower_bound и std::upper_bound из заголовка <algorithm> используются для поиска границ диапазона элементов, равных заданному значению, в отсортированном контейнере. Это основа для эффективного бинарного поиска.

Senior C++ Developer

18 Nov, 13:27


Конференция по системному ПО, железу, Linux и open source — OS DevConf от SberDevices

5 декабря | 11:00 | онлайн и офлайн в Москве

Приглашаем всех, кто в low-level — разработчиков системного и встраиваемого ПО, специалистов по разработке ядра и драйверов, специалистов по SoC, сетевых инженеров.

В программе — 17 выступлений. Среди них — про боли и практики системной разработки:
— APEX для решения несовместимости ABI
— Принципы и реализации обновлений embedded-устройств
— Практика использования ftrace
— Боли и страдания парсинга ELF-файлов, или Ещё раз о безопасном программировании

Также в программе — доклады про прототипы SoC, драйверы на Rust, параллельное программирование без ОС и работу с ядром Linux.

Полная программа и регистрация — на сайте конференции.

Реклама. ПАО Сбербанк. ИНН 7707083893

Senior C++ Developer

18 Nov, 11:30


⚙️ std::unique

Функция std::unique из заголовка <algorithm> удаляет последовательные дубликаты в отсортированном диапазоне, оставляя уникальные элементы. Это полезно для очистки списка от повторяющихся значений.

Senior C++ Developer

16 Nov, 14:03


⚙️ std::tie

Функция std::tie из заголовка <tuple> используется для создания кортежа ссылок, что позволяет удобно распаковывать значения из функций или объектов. Это упрощает многозначные возвраты и код чтения данных.

Senior C++ Developer

15 Nov, 14:11


Что будет выведено при выполнении кода?

Пояснение
⬇️
Лямбда-выражение с захватом по значению и спецификатором mutable работает с копией x. Изменение x внутри лямбды не влияет на оригинальную переменную x вне лямбды.

Senior C++ Developer

15 Nov, 09:01


Как построить облако с нуля? Узнайте от разработчиков новой облачной платформы MWS.

MWS запускает реалити-проект Building the Cloud о создании новой публичной облачной платформы. В прямом эфире наши эксперты и инженеры раскрывают закулисье облачной разработки, делятся уникальным опытом и отвечают на вопросы.

В первом выпуске расскажем о сердце облака — сервисе Compute.

О чём поговорим:
● Зачем мы строим новое публичное облако MWS
● Как устроена архитектура сервиса Compute в новой платформе MWS
● Что происходит «под капотом» облака, когда создаётся виртуальная машина
● Расскажем о планах и роудмапе новой платформы

Приглашаем разработчиков и профессионалов облачного рынка! Задайте свои вопросы разработчикам нового облака MWS и узнайте всё из первых рук.

📅 Дата: 20 ноября 2024, 11:00
👉 Регистрируйтесь сейчас, чтобы не пропустить эфир

Senior C++ Developer

15 Nov, 08:18


➡️ Crow — легковесный фреймворк для веб-приложений на C++

Crow — это минималистичный фреймворк для разработки веб-серверов на C++. Поддерживает маршрутизацию, работу с JSON и асинхронный ввод-вывод, что делает его идеальным для создания быстрых и лёгких API.

Простая маршрутизация для создания RESTful API.
Встроенная поддержка JSON через nlohmann/json.
Асинхронная обработка запросов для высокой производительности.

🔗 Ссылочка на доку

Senior C++ Developer

13 Nov, 20:56


⚙️ std::forward

Функция std::forward из заголовка <utility> используется для реализации идеальной передачи (perfect forwarding) аргументов в шаблонных функциях. Она позволяет сохранить категорию значения (lvalue или rvalue) передаваемого аргумента, что особенно полезно при написании обобщённого кода.

Senior C++ Developer

13 Nov, 18:24


Что будет выведено при выполнении кода?

Пояснение
⬇️
Для func(10) вызывается специализированная версия функции для int. Для func(10.5) вызывается шаблонная версия, так как точного соответствия нет.

Senior C++ Developer

13 Nov, 12:00


Получите оффер Software Engineer всего за 3 дня! 🚀

Вендор и производитель IT-инфраструктуры YADRO приглашает Software Engineer на SPRINT OFFER.

Команда KVADRA OS ждёт кандидатов сразу на два направления: Linux-based (от уровня junior) и Android (уровня middle и senior).

В YADRO под брендом KVADRA ребята создают персональные устройства, а также разрабатывают собственную операционную систему kvadraOS, которая поддерживает облачное хранилище и включает множество компонентов собственной разработки — от системного ядра до приложений и сервисов.

🔵 Присоединившись к YADRO, вы станете частью большого инженерного сообщества и получите возможность влиять на продукт, работая в уникальной команде специалистов.

Читайте подробности на сайте, оставляйте заявку до 24 ноября и присоединяйтесь к команде KVADRA OSпо ссылке.

Senior C++ Developer

13 Nov, 04:53


➡️ RaftLib — современная библиотека для параллельной обработки данных в C++

RaftLib — это библиотека с открытым исходным кодом, упрощающая разработку высокопроизводительных параллельных приложений на C++. Она позволяет создавать масштабируемые системы обработки данных, используя концепцию потоков и конвейеров.

Интуитивный интерфейс: Напоминает стандартные потоки C++, облегчая освоение.
Автоматическая параллелизация: Управляет потоками и распределением задач для оптимальной производительности.
Гибкость и масштабируемость: Эффективна как на локальных системах, так и в распределённых средах.

🔗 Ссылочка на доку

Senior C++ Developer

12 Nov, 19:06


⚙️ std::visit

В C++17 введена функция std::visit из заголовка <variant>, которая позволяет применять вызываемый объект (функтор, лямбда или функциональный объект) к текущему значению std::variant. Это обеспечивает безопасную и удобную работу с вариантами, заменяя необходимость в явных проверках типа и приведениях.

Senior C++ Developer

11 Nov, 10:58


⚙️ std::transform_reduce

Функция std::transform_reduce из заголовка <numeric> объединяет возможности std::transform и std::accumulate, позволяя сначала применить операцию к каждому элементу, а затем свести их к одному значению. Это полезно для производительного параллельного вычисления сумм, произведений и других операций.

Senior C++ Developer

07 Nov, 14:45


⚙️ std::transform

В C++ функция std::transform из <algorithm> позволяет применить функцию к каждому элементу контейнера, создавая новый набор данных. Удобна для преобразования элементов на лету.

Senior C++ Developer

06 Nov, 20:10


➡️ GSL: Библиотека численных методов для C/C++ разработчиков

GSL – бесплатная библиотека для C и C++, включающая комплексные числа, матрицы, полиномы и анализ. Она проста в использовании, безопасна для многопоточности и не имеет зависимостей.

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

🔗 Ссылочка на доку

Senior C++ Developer

05 Nov, 12:17


⚙️ std::all_of

В C++ функция std::all_of из <algorithm> проверяет, соответствуют ли все элементы заданному условию. Удобна для быстрой валидации содержимого контейнера.

Senior C++ Developer

04 Nov, 19:25


➡️ Что такое constexpr в C++?

constexpr — это спецификатор, который позволяет вычислять выражения во время компиляции. Это полезно, когда вы хотите гарантировать, что результат функции или значения будет рассчитан на этапе компиляции, что может улучшить производительность программы.

✔️ constexpr применяется для функций и переменных, которые могут быть рассчитаны на этапе компиляции, что делает код более эффективным.

🔗 Почитать подробнее

Senior C++ Developer

03 Nov, 17:57


⚙️ std::rename()

В C++ функция std::rename() из заголовка <cstdio> используется для переименования файла или перемещения его в новую директорию. Это стандартный способ работы с файлами на уровне ОС.

Senior C++ Developer

03 Nov, 15:49


Бесплатное IT-образование в 2024

Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления

Выбирайте нужное и подписывайтесь:

👩‍💻 Python: @PythonPortal
🖥 Базы Данных & SQL: @SQL
👩‍💻 Java: @Java_Iibrary
👩‍💻 С/С++: @Cpportal
📱 GitHub: @git_developer
🤓 Книги айти: @portalToIT
👩‍💻 Frontend: @FrontendPortal
⚙️ Backend: @BackendPortal
👩‍💻 C#: @KodBlog
👩‍💻 Golang: @juniorGolang
👩‍💻 PHP: @PHPortal
👩‍💻 Моб. разработка: @MobDev
👩‍💻 Разработка игр: @GameDevgx
👩‍💻 DevOps: @loose_code
🖥 Data Science: @DataSciencegx
🤔 Хакинг & ИБ: @cybersecinform
🐞 Тестирование: @QAPortal
📱 Маркетинг: @MarketingPortal
🖥 Дизайн: @PortalToDesign

➡️ Сохраняйте себе, чтобы не потерять

Senior C++ Developer

02 Nov, 11:02


➡️ Использование библиотеки Glaze для сериализации данных в C++

Glaze — это мощная библиотека для сериализации объектов C++ в различные форматы, такие как JSON, с высокой производительностью. Она поддерживает статическую сериализацию, обеспечивая компактность и быстрое преобразование данных.

Glaze подходит для приложений, где важна производительность при работе с большими объемами данных и их передачей в различные форматы.

🔗 Ссылочка на доку

Senior C++ Developer

01 Nov, 13:50


➡️ Использование библиотеки SML для работы с перечислениями в C++

SML — это библиотека для создания конечных автоматов с высокой производительностью и минимальной затратой на компиляцию. Она помогает моделировать сложные состояния и переходы.

🔗 Ссылочка на доку

Senior C++ Developer

01 Nov, 11:50


Стать сотрудником Яндекса быстрее и проще, чем кажется. Участвуйте в днях быстрого найма: решите тестовое, пройдите несколько секций собеседования и получите офер за несколько дней.

Ближайшее мероприятие:

• 9-11 ноября — для продуктовых и аналитиков данных, офер за 3 дня в команды Финтеха и Яндекс Практикума.

Зарегистрироваться

Senior C++ Developer

01 Nov, 11:00


➡️ Использование библиотеки Outcome для обработки ошибок в C++

Outcome — это библиотека для удобной работы с обработкой ошибок в C++. Она предоставляет гибкий механизм для возврата и обработки ошибок без использования исключений, что улучшает производительность и делает код более предсказуемым.

Outcome позволяет возвращать и обрабатывать значения ошибок с минимальными накладными расходами.

🔗 Ссылочка на доку

Senior C++ Developer

31 Oct, 14:09


➡️ Использование библиотеки magic_enum для работы с перечислениями в C++

magic_enum — это современная библиотека для C++, которая предоставляет возможности рефлексии для перечислений (enum). Она позволяет легко преобразовывать значения перечислений в строки и обратно, а также получать список всех значений перечисления.

magic_enum упрощает работу с перечислениями, улучшая читаемость и безопасность кода.

🔗 Ссылочка на доку

Senior C++ Developer

30 Oct, 22:56


➡️ Использование библиотеки di для создания зависимостей в C++

di — это легковесная библиотека для управления зависимостями в C++. Она предоставляет простой способ внедрения зависимостей, что делает код более модульным и тестируемым.

di поддерживает автоматическое создание зависимостей и упрощает управление компонентами в сложных проектах.

🔗 Ссылочка на доку

Senior C++ Developer

30 Oct, 15:00


14 ноября, YADRO С++ meetup, Москва и онлайн

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

В программе:

• Как сочетать объектный подход с современным программированием.
• Паттерны ООП, которые сделают проект гибким и легким в поддержке.
• Удобство интрузивных контейнеров.
• Что помогает нам в разработке 5G сетей.
• Инструменты библиотеки Boost.Intrusive.
Дискуссия: эксперты из YADRO, Яндекса, Syntacore и Касперского обсудят, как протекает реализация стандартов: на сколько быстро внедряются фичи, стоит ли обратить внимание на подходы других языков и становится ли продукт безопасней, если написан на новых стандартах?

Офлайн-участники смогут увидеть «железо» для ЦОД и телеком-операторов, код для которого пишут С++ разработчики YADRO, пообщаться с экспертами на мини-стендах, поучаствовать в технических интерактивах и получить призы после митапа.

Участие бесплатное, регистрация обязательна.

До встречи!

Senior C++ Developer

27 Oct, 18:17


➡️ Использование библиотеки EnTT для работы с системами сущностей (Entity-Component-System, ECS) в C++

EnTT — это мощная библиотека для создания игр и симуляций с использованием паттерна Entity-Component-System (ECS).

Она позволяет легко управлять большими наборами объектов (сущностей) и их компонентами, что делает её отличным выбором для разработки игровых приложений и других систем, где важна масштабируемость и производительность.

EnTT — отличный инструмент для разработчиков, создающих сложные игровые системы или симуляции с большим количеством взаимодействующих объектов.

🔗 Ссылочка на доку

Senior C++ Developer

26 Oct, 18:39


➡️ Использование библиотеки async_simple для работы с асинхронностью в C++

async_simple — это новая библиотека, которая предоставляет простой и эффективный способ работы с асинхронными операциями в C++. Она упрощает управление асинхронными задачами, улучшая читабельность и производительность кода.

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

🔗 Ссылочка на доку

Senior C++ Developer

25 Oct, 15:10


➡️ Использование библиотеки cppcoro для работы с корутинами в C++

cppcoro — это библиотека, предоставляющая набор инструментов для работы с корутинами в C++, включая асинхронные операции, таймеры, семафоры и другие примитивы синхронизации. Это упрощает написание асинхронного кода с поддержкой корутин, обеспечивая высокую производительность и читаемость.

cppcoro — отличный выбор для создания высокопроизводительных асинхронных приложений с использованием корутин.

🔗 Ссылочка на доку

Senior C++ Developer

23 Oct, 07:56


➡️ Использование std::latch для синхронизации потоков

std::latch — это примитив синхронизации, который позволяет одному или нескольким потокам ожидать, пока другие потоки не завершат выполнение. В отличие от std::barrier, он не перезагружается после достижения условия синхронизации, что делает его полезным для одноразовой координации.

std::latch полезен в ситуациях, когда необходимо, чтобы один поток ждал завершения других потоков.

Senior C++ Developer

22 Oct, 17:17


Вопрос на собеседовании

Как работает Rule of Five в C++ и когда его следует применять?

Ответ ⬇️
Rule of Five говорит о том, что если ваш класс управляет ресурсами, вам нужно явно определить пять специальных методов: конструктор копирования, оператор присваивания копированием, конструктор перемещения, оператор присваивания перемещением и деструктор. Это важно, чтобы избежать утечек ресурсов или неправильного управления памятью при копировании или перемещении объектов.

Senior C++ Developer

21 Oct, 06:39


➡️ Использование std::flat_map для оптимизации производительности

std::flat_map — это структура данных, которая представляет собой ассоциативный контейнер, хранящий пары "ключ-значение" в упорядоченном виде с использованием вектора.

В отличие от std::map, std::flat_map оптимизирован для случаев, когда количество элементов невелико, так как хранение данных в последовательной области памяти снижает накладные расходы и улучшает кэширование.

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

Senior C++ Developer

20 Oct, 14:19


absl::btree

absl::btree
— это реализация B-дерева в библиотеке Abseil для C++.
Преимущества absl::btree — это хранение данных в отсортированном порядке, быстрый поиск, вставка и удаление за O(logN), поддержка уникальных и неуникальных ключей, реализация set и map.

Применяется в задачах, где нужна высокопроизводительная структура данных с отсортированным доступом, например:

Реализация словарей и сортированных множеств;
Для хранения данных в базах данных;
В поисковых системах для индексов;
В структурах вроде кэша для быстрого доступа;
В задачах машинного обучения для хранения данных.

Senior C++ Developer

20 Oct, 10:01


Пс...
Тут два С++ сеньора создали канал, где простым языком поясняют за плюсы, метапрограммирование, фишки новых стандартов, алгоритмы, вопросы с собеседований и другие непонятные штуки из современного программирования на С++.

Прямо сейчас Вы можете бесплатно забрать гайды по собеседованиям, по категориям выражений и мув-семантике и по ключевому слову inline. Все найдете в закрепе канала.

Подписывайтесь, чтобы пояснять друзьям за оптимизации компилятора, о которых вам никто не расскажет: Грокаем С++

Senior C++ Developer

20 Oct, 05:43


#вопросы_с_собеседований
Может ли inline-функция быть рекурсивной?

Поскольку компилятор просто встраивает код inline-функции в место вызова, не имеет значения, является ли эта функция рекурсивной или нет. Компилятор будет просто копировать один и тот же код функции при каждом рекурсивном вызове.

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

Senior C++ Developer

18 Oct, 12:24


#вопросы_с_собеседований
Какие отличия у std::array и std::vector?

std::array — это обёртка вокруг обычного массива, фиксированного размера, а std::vector - это динамически расширяемый массив. std::array хранит свои данные в стековой памяти, а vector выделяет память в куче (динамическая память). У std::array в параметрах шаблона указывается тип хранимых элементов и размер массива. А у std::vector - тип элементов и ещё возможно указать аллокатор, который нужно использовать при выделении памяти (с помощью new). std::array чуть лучше по производительности в случае небольшого массива, чем std::vector, который содержит в себе несколько указателей, которые указывают на выделенный в куче кусок памяти.

Senior C++ Developer

17 Oct, 20:33


#вопросы_с_собеседований
Что быстрее: постфиксные инкрементные операторы или префиксные? Чем отличается их сигнатура?

Префиксные операторы быстрее. В постфиксных операторах производится дополнительная операция сохранения предыдущего состояния объекта, а затем только увеличение на 1, а в префиксном операторе после инкрементирования объекта, сразу возвращается ссылка объект.

Сигнатура их отличается фиктивным параметром int у постфиксного оператора.

Senior C++ Developer

17 Oct, 15:10


🔥 Weekend Offer Backend в Яндекс 26–27 октября

Устройтесь backend-разработчиком в Яндекс онлайн за одни выходные.

↔️ К участию приглашаем разработчиков на C++, Python, Go, Java или Kotlin, с опытом коммерческой разработки от трёх лет, которые готовы работать в офисном или гибридном режиме на территории России или Республики Беларусь.

🛐План простой: зарегистрируйтесь и до 23 октября решите пару задачек в Контесте, 26 октября пройдите два технических собеседования, а 27 октября получите офер.

🔛В Weekend Offer Backend участвуют разные сервисы: Финтех, HR-Tech, Образование, МВА, Биллинг, Геосервисы, Реклама, Поисковые сценарии. Чтобы заранее подумать, с кем вам хочется пообщаться 17 октября мы проведем онлайн-встречу в зуме, где команды расскажут о себе и задачах.

🆖 Узнать подробности и принять участие можно здесь.

Senior C++ Developer

17 Oct, 14:45


#вопросы_с_собеседований
Что лучше: const или define?

Ответ:
define - это директива препроцессора, которая не учитывает ни типов, ни областей видимости. Препроцессор вставляет значение везде, где оно используется и создается множество копий 3.14159265359 в объектном коде, константа никогда не порождает больше одной копии этого значения. define трудно отлаживать, потому что у него нет имени, только магическое число, нельзя взять адрес или создать ссылку на это значение.

У const есть тип, область видимости, можно взять адрес, создать константную ссылку на эту переменную.

Определенно, лучше использовать const, а не define.

Senior C++ Developer

17 Oct, 12:44


Yandex Cloud запустил сервис для ускорения разработки продуктов в облаке Yandex Serverless Integrations

Теперь разработчики смогут при минимальном написании кода автоматизировать различные процессы, например обработку онлайн-заказов и мониторинг систем безопасности.

Сделать это можно благодаря инструменту Yandex Workflows — он позволяет описать последовательность операций с помощью декларативного языка YAML. Сервис автоматически запустит эти процессы и проконтролирует их выполнение.

Помимо этого, Yandex Serverless Integrations включает в себя инструменты EventRouter для передачи событий между сервисами и API Gateway для создания шлюзов между внешними и облачными сервисами по спецификации OpenAPI 3.0.

Читайте подробнее в статье

Senior C++ Developer

17 Oct, 10:39


Быстрая сортировка

Отсортируйте заданный массив с помощью быстрой сортировки.

Формат входных данных:
Первая строка входных данных содержит одно натуральное число nn (1 ≤ n ≤ 10^5) – количество элементов в массиве. В следующей строке находятся элементы массива – n целых чисел, не превосходящих по абсолютной величине 10^9.

Формат выходных данных:
Выведите элементы массива в порядке неубывания.

Senior C++ Developer

16 Oct, 18:29


#вопросы_с_собеседований
Виртуальный конструктор: что он собой представляет?

Ответ:
Это
каверзный вопрос с IT-собеседований, который чаще всего задают после виртуальных деструкторов, чтобы запутать. Конструктор не может быть виртуальным, поскольку в этом нет никакого смысла: при создании объектов нет такой неоднозначности, как при их удалении.😁

Senior C++ Developer

15 Oct, 17:01


Автоматический вывод типа аргумента шаблона класса

Выглядит название этой возможности довольно длинным и сложным, но на самом деле ничего сложного тут нет. Основная идея в том, что в C++17 вывод типов аргументов шаблонов выполняется и для стандартных шаблонов классов. Ранее это поддерживалось лишь для функциональных шаблонов. В результате оказывается, что раньше писали так:

std::pair<std::string, int> user = {"M", 25};

С выходом C++ 17 эту конструкцию стало можно заменить на эту:

std::pair user = {"M", 25};

Вывод типов выполняется неявно. Этим механизмом ещё удобнее пользоваться в том случае, когда речь идёт о кортежах. А именно, раньше приходилось писать следующее:

std::tuple<std::string, std::string, int> user ("M", "Chy", 25);

Теперь же то же самое выглядит так:

std::tuple user2("M", "Chy", 25);

Тут стоит отметить, что эти возможности не покажутся чем-то достойным внимания тем, кто не особенно хорошо знаком с шаблонами C++.

Senior C++ Developer

15 Oct, 15:00


🌐Научитесь создавать сетевые сервисы на C++ с помощью фреймворка userver!

Приглашаем вас на открытый вебинар 17 октября в 20:00 МСК, где мы подробно разберем:

- Как подключить userver в проект;
- Как собрать userver с нужной конфигурацией;
- Как написать сетевой сервис, работающий с REST и WebSocket API;
- Как реализовать аутентификацию для нового сервиса.

🎓 Встречаемся в преддверии старта курса «C++ Developer. Professional». Все участники вебинара получат специальную цену на обучение!

🔗Регистрируйтесь прямо сейчас, чтобы не пропустить это важное мероприятие: https://otus.pw/4ykh/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Senior C++ Developer

15 Oct, 13:33


Современные возможности C++ и проверенные паттерны: активный объект, внешний полиморфизм и корутины

В этой статье автор показывает, как внешний полиморфизм (реализация полиморфного поведения вне объекта, для которого такое поведение требуется) помогает писать красивые и чистые программы, и рассказывает о некоторых базовых и продвинутых способах реализации.

Смотреть статью

Senior C++ Developer

14 Oct, 20:02


Метод map::max_size()

map::max_size() — это встроенная функция C++ STL, которая возвращает максимальное количество элементов, которые может содержать контейнер map.

Senior C++ Developer

13 Oct, 18:04


Особенности реализации STL в Clang, GCC и Microsoft С++

Смотреть статью

Senior C++ Developer

12 Oct, 17:13


Алгоритм rotate

Меняет местами элементы в диапазоне [first, last) таким образом, что элемент n_first становится первым в новом диапазоне, а n_first-1 — последним.

Параметры:
first, last - диапазон элементов для изменения их порядка.
n_first - элемент, который должен стать первым в новом диапазоне.

Senior C++ Developer

12 Oct, 15:00


Главная конференция по бизнесу в Telegram

31 октября в Москве пройдёт первая конференция по Telegram от крупнейшего сервиса аналитики Telemetr. Топы Телеграм-рынка, маркетологи и представители бизнеса обсудят самые актуальные тенденции и перспективы развития платформы Telegram.

Присоединиться к мероприятию можно будет и онлайн. Тут найдёте всю информацию - https://telemetr.pro.

На конференции вас ждут:
- 20+ опытных спикеров
- 1000+ онлайн и офлайн участников
- две сцены
- нетворкинг активности
- лаунж зона
- вкусный фуршет
- яркое afterparty в PAPA Moscow

Спикерами главной сцены будут: Артемий Лебедев, руководитель Telemetr - Денис Ларионов, основатель агентства GoDigital - Сурен Альбертян, основатель Сидорин ЛАБ - Дмитрий Сидорин и многие другие!

За подробностями сюда - https://telemetr.pro

А купить билет со скидкой в 10% можно, использовав наш промокод - TMConf10

Купить билет - https://telemetr.pro

Senior C++ Developer

12 Oct, 14:37


Изучение физического движка Bullet Physics. Часть 2. Примеры

Смотреть статью

Senior C++ Developer

11 Oct, 10:22


this удобно использовать для цепочных вызовов

Мы можем вернуть ссылку на объект, на котором мы вызываем метод класса:

Foo &set(int x) { this->x = x; return *this; }

Здесь метод set возвращает ссылку на объект класса Foo(Foo&). Такая реализация метода позволяет нам писать код, подобный этому:

obj.set(2).set(8);

Это возможно, поскольку первый вызов метода set возвращает указатель на объект obj. Второй метод вызывается на объекте obj, т. е. можно переписать код так:

obj = obj.set(2);
obj = obj.set(8);

Senior C++ Developer

11 Oct, 07:37


Senior-разработчик создал крутейший канал про SQL

Благодаря простым картинкам даже новичок научится разрабатывать приложения с использованием баз данных.

Присоединяйтесь: @SQL