seniorcpp | Unsorted

Telegram-канал seniorcpp - Senior C++ Developer

13626

Изучаем C++. По вопросам сотрудничества: @adv_and_pr

Subscribe to a channel

Senior C++ Developer

std::initializer_list

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

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

Читать полностью…

Senior C++ Developer

🖼 Axodox machinelearning

Чистая реализация на C++ синтеза изображений на основе стабильной диффузии, включая txt2img, img2img и inpainting.

Github

Читать полностью…

Senior C++ Developer

🥻 Стилизация без границ: создаём бюст в ZBrush!

Стилизация является неотъемлемой частью 3д моделирования. Благодаря ей проекты получают не только выразительность и уникальность, но и оптимизацию и доступность

👉На уроке вы:
- Освоите профессиональные техники в ZBrush
- Создадите уникальный стилизованный бюст
- Научитесь работать с формами и пропорциями
Бесплатный вебинар проходит в рамках курса “3D Artist“

Регистрация и подробнее о курсе 3D Artist - https://otus.pw/w3pr/

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

Читать полностью…

Senior C++ Developer

Пространство имен

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

В этом примере MyNamespace — это пространство имен, которое содержит функцию myFunction. Чтобы вызвать функцию из этого пространства имен, используется оператор разрешения области ::.

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

Читать полностью…

Senior C++ Developer

GTK+

Один из самых популярных графических фреймворков нарадяду с Qt, предназначен для создания виджетов, GUI и просто красивых графических оболочек программы, поддерживает Windows, macOS X, Linux и Unix-подобные системы.

https://www.gtk.org/

Читать полностью…

Senior C++ Developer

Что нужно дописать, чтобы при вызове конструктора перемещения член класса действительно "переместился"?

Нужно дописать std::move в списке инициализации перемещающего конструктора:
A(A&& oth) : str(std::move(oth.str)){ }

Но это гарантирует "перемещение" только в том случае, если у этого объекта, в свою очередь, есть перемещающий конструктор (в данном случае, у std::string он есть).

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Какие есть особенности работы с shared memory?

Работа с разделяемой памятью (shared memory) предполагает использование операций чтения и записи данных в общую область памяти, которая разделяется между несколькими процессами.

Среди особенностей можно выделить основные:

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

Кроме того, при работе с shared memory необходимо учитывать, что изменения данных в одном процессе автоматически не отображаются в других процессах. Для обновления данных необходимо явно синхронизироваться между процессами.

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

Читать полностью…

Senior C++ Developer

Что такое RAII?

RAII (Resource Acquisition Is Initialization) — это идиома в C++, которая используется для управления ресурсами, такими как память или файлы, с помощью механизма автоматического управления памятью (например, деструкторами объектов).

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

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

Читать полностью…

Senior C++ Developer

Аллокатор

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

В стандартной библиотеке C++ есть несколько аллокаторов, таких как new и delete, которые предоставляют базовую функциональность выделения и освобождения памяти. Однако C++ также предоставляет механизмы для создания собственных аллокаторов, которые могут быть настроены и оптимизированы под конкретные нужды приложения.

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

Читать полностью…

Senior C++ Developer

Примеры C++ кода до и после Ranges

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

Читать полностью…

Senior C++ Developer

Почему я программирую на С/C++ (язык для профессионалов!)

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

Читать полностью…

Senior C++ Developer

Улучшите читаемость и надежность кода на C++: узнайте основы эффективного рефакторинга

⏺️ На открытом уроке вы научитесь двум мощным приемам дизайна ПО: декомпозиции и абстрагированию.

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

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

Посетите открытый урок в преддверие старта курса «C++ Developer» и получите скидку на обучение!

🔴 Встречаемся 19 июня в 20:00 МСК.

Регистрируйтесь прямо сейчас, чтобы не пропустить:
https://otus.pw/zNWS/

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

Читать полностью…

Senior C++ Developer

Исключения в C++: безопасность, спецификации, бенчмарки

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

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

Читать полностью…

Senior C++ Developer

Особенности вызова функций в С++

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

Читать полностью…

Senior C++ Developer

Метод map::emplace_hint

Аналогичен методу emplace(), но дополнительно позволяет подсказать позицию вставки с помощью итератора. Метод возвращает итератор на вставленный элемент или на существующий элемент (вставить элемент с одинаковым ключом нельзя).

Читать полностью…

Senior C++ Developer

⭐️ Техножурнал Яндекс 360: рассказываем о технологиях

В Яндекс 360 мы создаём технологии, которые работают в основе более чем 13 сервисов, включая Диск, Почту, Телемост, Мессенджер и другие.

Открывайте Техножурнал, чтобы узнать:

Как мы балансируем нагрузку в 300k RPS в Яндекс Мессенджере,
Как подружили MongoDB и PostgreSQL в Диске,
Какие в команде культура и ценности.

А ещё — как мы внедряли DDD, кто такой Technical Owner, как управляем 650+ шардами PostgreSQL и как подходим к проектированию архитектуры наших сервисов.

⭐️ Всё это — в Техножурнале Яндекс 360.

@yandex360team

Читать полностью…

Senior C++ Developer

std::weak_ordering

std::weak_ordering — это тип в C++, который введен в стандарте C++20 для использования в контексте трехсторонних операторов сравнения (таких как операторы <=> и ==). Этот тип предоставляет четыре значения: std::weak_ordering::equivalent, std::weak_ordering::less, std::weak_ordering::greater и std::weak_ordering::unordered.

std::weak_ordering используется для сравнения объектов, когда сравнение может быть неоднозначным или невозможным, но при этом необходимо учесть отношение порядка. Например, при сравнении чисел с плавающей точкой, если одно или оба числа являются NaN (Not a Number), то результат сравнения может быть неопределенным. В таких случаях std::weak_ordering может использоваться для предоставления информации о том, являются ли объекты эквивалентными, меньшими, большими или не сравнимыми.

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

Читать полностью…

Senior C++ Developer

🎮 Hypersomnia - интересный проект для пркатики на C++. Hypersomnia - онлайн-шутер с видом сверху, доступный как бесплатное ПО.

▪ Игра разрабатывается как MMO с RPG элементами.

▪ Версии игры доступны для Windows, GNU/Linux и MacOS и имеют небольшой размер загрузки - только 25 МБ.

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

Код

Читать полностью…

Senior C++ Developer

Nana

Nana — это кроссплатформенная библиотека для программирования GUI в стиле современного C++. Поддерживаемые системы: Windows, Linux (X11) и Mac OS (экспериментально). Поддержка С++11\17 даёт возможность использовать современные фичи C++: лямбды, умные указатели и стандартную библиотеку. Так как это не фреймворк, использование Nana не будет оказывать влияния на архитектуру программы.

Здесь можно посмотреть документацию и примеры.

Читать полностью…

Senior C++ Developer

Декларатор ссылки lvalue: &

Содержит адрес объекта, но синтаксически ведет себя подобно объекту.

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

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

В примере демонстрируется декларатор ссылки путем объявления объекта Person и ссылки на этот объект. Поскольку rFriend является ссылкой на myFriend, при обновлении любой из этих переменных изменяется один и тот же объект.

Читать полностью…

Senior C++ Developer

#вопросы_с_собеседований
Какие примитивы синхронизации реализованы в C++?

В с++ реализовано множество примитивов синхронизации, ниже представлены их предназначения:

Mutex - используется для блокировки мьютекса при доступе к разделяемому ресурсу.

lockguard и uniquelock - используются для автоматической блокировки и разблокировки мьютекса.

condition_variable - используется для уведомления потоков о состоянии разделяемого ресурса.

atomic - используется для атомарной операции с переменными.

semaphore - используется для синхронизации доступа к ограниченному количеству ресурсов.

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

Читать полностью…

Senior C++ Developer

Паттерн проектирования «Посетитель»

Паттерн проектирования «Посетитель» (Visitor) — это поведенческий паттерн, который позволяет добавлять новые операции к объектам без изменения их классов. Он достигается путем создания специального объекта, называемого "посетителем", который посещает все элементы объекта и выполняет необходимую операцию.

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

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

Читать полностью…

Senior C++ Developer

namespace alias

В C++, вы можете использовать «namespace alias» (псевдоним пространства имен) для упрощения работы с длинными именами пространств имен. Это позволяет вам создать более короткий псевдоним для длинного имени пространства имен, что улучшает читаемость кода и уменьшает вероятность конфликтов имен.

Для создания псевдонима пространства имен используйте ключевое слово namespace с алиасом (псевдонимом).

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

Читать полностью…

Senior C++ Developer

Ты будешь жалеть, что не узнал это о девушках раньше.

На канале Творчество чувств автор с многолетним опытом всех форматов отношений рассказывает о тонкостях женской психологии, которые ВАЖНО узнать перед тем, как подкатывать к той самой:

— Почему 95% девушек непригодны для построения отношений?
— 3 признака, кричащие о том, что девушка точно изменит в будущем
— Как за несколько сообщений влюбить в себя любую девушку


Подпишись и узнай секрет женской симпатии:
t.me/+NcZ3vFzbiY5mYWI6

Читать полностью…

Senior C++ Developer

📚 Продвинутые методы архивации: LZ77/78

Приглашаем на открытый урок.

🗓 25 июня в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Алгоритмы и структуры данных».

✔️ На этом вебинаре мы завершим создание архиватора, добавив алгоритм LZ77/78. Разберем принцип словарного сжатия, механизм поиска повторяющихся последовательностей и формат их кодирования.

✔️ Имплементируем выбранный алгоритм и проведем финальное сравнение всех трех методов сжатия (RLE, Huffman, LZ77/78). Определим, какие алгоритмы лучше работают для различных типов файлов и почему.

Завершающее практическое занятие для тех, кто хочет освоить продвинутые алгоритмы и увидеть их применение в реальном проекте.​​​​​​​​​​​​​​​​

🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - Algo5

👉 Регистрация на вебинар: https://otus.pw/iJYd/

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

Читать полностью…

Senior C++ Developer

Функция atoi

Функция atoi преобразует строку string в целое значение типа int. Анализируя строку string, atoi интерпретирует её содержание, как целое число, которое возвращается как int.

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

Строка может содержать другие символы после считанного целого числа, эти символы игнорируются и никак не влияют на поведение этой функции.

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

Читать полностью…

Senior C++ Developer

Возврат нескольких значений из функции

Вы можете написать функцию, которая будет возвращать два и более значений, с помощью std::tuple и std::tie.

Читать полностью…

Senior C++ Developer

Пишем свой парсер математических выражений и калькулятор командной строки

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

Читать полностью…

Senior C++ Developer

Создание игры Pac-Man на C++

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

Читать полностью…

Senior C++ Developer

Встраиваемые функции

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

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

Читать полностью…
Subscribe to a channel