Senior C++ Developer
13K subscribers
1.26K photos
3 videos
576 links
№ 4931128893
Изучаем C++.

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

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

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

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

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

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

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

#для_начинающих
std::launch::deferred

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

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

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

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

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

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

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

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

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

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

https://www.webtoolkit.eu/wt

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

std::launch::async — это одна из опций, доступных при создании объекта std::launch::async | std::launch::deferred в контексте создания потоков с использованием стандартной библиотеки C++ (поддерживается начиная с C++11). Эта опция определяет, каким образом будет запущена функция в новом потоке, когда вы используете std::async.

std::launch::async указывает на то, что функция должна быть немедленно запущена в отдельном потоке (асинхронно). Это означает, что она выполнится в фоновом режиме и может начать выполнение даже до того, как объект std::future, возвращаемый std::async, будет использован для получения результата выполнения функции. В этом случае система управляет тем, как и когда будет создан новый поток.

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

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

Выгода функтора состоит в том, что:
а). Его можно параметризовать при создании объекта (перед вызовом) используя конструктор объекта с параметрами/
б). Может создаваться временный объект исключительно на время выполнения функционального вызова.

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

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

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

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

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

Синтаксис reinterpret_cast выглядит так:

new_type = reinterpret_cast<new_type>(expression);

Где new_type — это тип, в который вы хотите преобразовать expression, и expression — это значение или выражение, которое вы хотите преобразовать.

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

Функция strrchr() является частью стандартной библиотеки C и C++. Она используется для поиска последнего вхождения указанного символа в строке, представленной в виде массива символов (строки).

Параметры функции включают:

str (const char*): Указатель на строку, в которой будет выполнен поиск.
character (int): Символ, который вы ищете в строке.
Функция strrchr() возвращает указатель на последнее вхождение символа character в строке str. Если символ не найден, то функция возвращает нулевой указатель (nullptr).

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

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

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

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

Remote Procedure Call (RPC) — это механизм, который позволяет вызывать удаленные процедуры или функции на удаленном компьютере, как если бы они были локальными. Это позволяет приложениям взаимодействовать через сеть или между процессами на одной машине.

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

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

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

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

std::piecewise_construct — это часть стандартной библиотеки C++ и представляет собой структуру, используемую в конструкторах некоторых контейнеров, таких как std::map и std::unordered_map, для конструирования элементов контейнера с использованием разных конструкторов для ключей и значений.

Обычно std::piecewise_construct используется вместе с методами emplace для вставки новых элементов в контейнер. Это позволяет создавать элементы контейнера, используя конструкторы ключей и значений независимо, что может быть полезным, если ключи и значения требуют разных конструкторов.

#для_продвинутых
#вопросы_с_собеседований
В каком порядке инициализируются и уничтожаются члены класса?

Сначала вызываются конструкторы базовых классов в порядке наследования.
Затем инициализируются члены класса в порядке их объявления в классе.
После этого вызывается конструктор текущего класса.

Аналогичным образом происходит уничтожение объекта:
Сначала вызывается деструктор текущего класса.
Затем уничтожаются члены класса в порядке, обратном их инициализации.
Далее вызываются деструкторы базовых классов в обратном порядке наследования.
std::find

std::find - это алгоритм из стандартной библиотеки, который ищет элемент в контейнере.

Он принимает 3 аргумента:
- Итератор на начало контейнера
- Итератор на конец контейнера
- Искомое значение

И возвращает итератор на найденный элемент или итератор на конец, если элемент не найден.

В примере мы ищем элемент со значением 3 в векторе vec. std::find возвращает итератор на найденный элемент, по которому мы выводим значение.
Умные указатели в С++

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

Среди основных умных указателей:

- unique_ptr - указатель, который владеет объектом в единственном экземпляре.

- shared_ptr - указатель, у которого может быть несколько владельцев.

- weak_ptr - указатель на объект, владельцем которого является shared_ptr.

#это_база
set::erase()

Функция set::erase() используется для удаления элементов из контейнера set.

set::erase() принимает значение, которое нужно удалить, в качестве аргумента и удаляет из set все элементы, эквивалентные переданному значению.
Если такого значения нет в set, не делает ничего.

В этом примере создается set целых чисел, добавляются значения от 1 до 5. Затем вызывается numbers.erase(3) - это удалит элемент со значением 3 из set.

#это_база
absl::btree

absl::btree представляет собой реализацию дерева поиска (B-tree) в библиотеке Abseil, которая предоставляет набор базовых структур данных и других полезных компонентов для C++. Abseil (или Abseil C++ Common Libraries) — это набор библиотек, разработанных Google, предназначенных для общего использования в C++ проектах.

Дерево поиска (B-tree) является структурой данных, которая используется для хранения отсортированных данных и обеспечивает эффективные операции вставки, удаления и поиска. Одним из применений B-деревьев является хранение данных в базах данных.

absl::btree предоставляет реализацию эффективного B-дерева, которое может быть использовано в ваших C++ проектах.

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