Senior C++ Developer
12.6K subscribers
1.33K photos
3 videos
600 links
Изучаем C++.

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

РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba
Download Telegram
Функция std::midpoint

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

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

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

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

1. Получите библиотеку DynaPDF: Вы должны сначала получить доступ к библиотеке DynaPDF. Вы можете загрузить ее с официального веб-сайта DynaForms.
2. Включите библиотеку в свой проект: После загрузки библиотеки DynaPDF, вы должны включить ее в ваш проект C++. Это может потребовать добавления соответствующего пути к заголовочным файлам и библиотекам в настройках вашей среды разработки.
3. Создайте код для работы с DynaPDF: Теперь вы можете начать писать код на C++, который использует функции и классы, предоставляемые DynaPDF, для создания, редактирования и обработки PDF-файлов. Для этого вы можете использовать функции и классы, предоставленные библиотекой DynaPDF.

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

std::find — это функция из стандартной библиотеки C++ (STL), которая используется для поиска заданного значения в контейнере, таком как std::vector, std::list, std::array, и других.

Прототип функции выглядит следующим образом:

template <typename InputIterator, typename T>
InputIterator find(InputIterator first, InputIterator last, const T& value);

first — итератор, указывающий на начало контейнера.
last — итератор, указывающий за конец контейнера.
value — значение, которое вы ищете в контейнере.
std::find возвращает итератор, указывающий на первое вхождение value в контейнере, или last, если значение не найдено.

#для_продвинутых
Функция set_symmetric_difference

Функция set_symmetric_difference используется для нахождения симметрической разницы между двумя упорядоченными множествами (set) и записи её в другое множество. Симметрическая разница включает в себя элементы, которые присутствуют в одном из множеств, но не в обоих.

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

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

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

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

https://www.webtoolkit.eu/wt

#для_продвинутых
Функция find_last_not_of

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

#для_начинающих
Обфускация

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

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

#для_продвинутых
Перезагрузка оператора индексации

В C++, перезагрузка оператора индексации (operator[]) позволяет вам создавать собственные классы с доступом к элементам, подобным массивам, используя квадратные скобки для доступа к элементам объекта. Вы можете перегрузить оператор operator[] для пользовательского класса, чтобы обеспечить индексированный доступ к его элементам.

#для_продвинутых
Форматирование текста на C++ старым и новым способом

Смотреть статью
Перезагрузка битовых операторов

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

#для_начинающих
Интеграционные тесты

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

На картинке пример с использованием фреймворка Google Test.

#для_продвинутых
std::launch::deferred

std::launch::deferred — это один из флагов, которые можно использовать при создании объекта std::thread в C++. Этот флаг указывает на то, что выполнение потока будет отложено до момента, когда будет вызван метод join() или detach() для этого потока.

Когда вы создаете объект std::thread с флагом std::launch::deferred, фактическое выполнение кода потока не начинается немедленно. Вместо этого поток будет запущен и выполнен только в тот момент, когда вы вызовете метод join() или detach() для этого объекта потока.

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

std::weak_ptr в C++ это часть стандартной библиотеки C++, которая используется для работы с умными указателями (smart pointers) и предназначена для решения проблемы циклических ссылок (cyclic references), которая может возникать при использовании std::shared_ptr.

Использование std::weak_ptr полезно в ситуациях, где существует потенциальная циклическая зависимость между объектами, и вы хотите избежать утечек памяти, связанных с этими зависимостями.

#для_начинающих
Принцип YAGNI

Принцип YAGNI (You Ain't Gonna Need It), который также известен как «Не добавляйте функциональность, пока она не понадобится».

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

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

#для_продвинутых
Дружественные функции

Дружественные функции (friend functions) — это функции, которые объявлены как дружественные внутри класса и имеют доступ к закрытым и защищенным членам этого класса. Это позволяет функциям, которые не являются методами класса, работать с его данными. Дружественные функции объявляются с использованием ключевого слова friend внутри определения класса.

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

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

Undefined behavior (неопределенное поведение) — это концепция в C++, которая означает, что результат выполнения определенного кода программы не определен и может быть непредсказуемым. Это означает, что в случае наличия undefined behavior в программе нельзя надеяться на какие-либо гарантированные результаты, и программа может вести себя по-разному в разных средах выполнения или даже в разные моменты времени.

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

#для_начинающих
Принцип lock-free

Принцип lock-free (без блокировок) в С++ относится к методам многопоточного программирования, которые позволяют избегать использования блокировок (locks) для обеспечения безопасности доступа к данным из нескольких потоков.

Основная идея lock-free программирования заключается в том, чтобы позволить нескольким потокам одновременно работать с общими данными без блокировки выполнения одного или нескольких потоков.

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

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

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

Прежде всего, мьютекс (mutex) — это механизм синхронизации, который предоставляет эксклюзивный доступ к разделяемым данным одному потоку в данный момент времени. std::lock_guard является удобной оберткой для работы с мьютексами.

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

Принцип DRY (Don't Repeat Yourself) — это основной принцип программирования, который призывает избегать дублирования кода. Этот принцип подразумевает, что каждая часть информации или логики должна существовать в системе только в одном месте. В контексте С++ принцип DRY означает, что вы должны избегать повторения кода, функций, классов или любых других конструкций.

#для_продвинутых
Паттерн проектирования «Посетитель»

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

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

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