Senior C++ Developer
12.9K subscribers
1.29K photos
3 videos
587 links
№ 4931128893
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr
Download Telegram
#вопросы_с_собеседований
Как подсчитать количество элементов в std::list?

Чтобы подсчитать количество элементов в std::list, можно использовать следующие способы:

1. Вызвать метод size() самого списка. Он вернет количество элементов.
2. Проитерировать список циклом и считать элементы.
3. Воспользоваться алгоритмом std::distance, передав ему начало и конец списка.
4. Применить алгоритм std::count_if с условием, которое всегда истинно.
Библиотека <pty.h>

Библиотека <pty.h> используется для работы с псевдотерминалами (PTY — Pseudo Terminal). Псевдотерминалы предоставляют средство для создания пары устройств, одно из которых может использоваться как мастер (master), а другое как рабочее (slave). Процессы могут обмениваться данными между этими устройствами, эмулируя терминальные взаимодействия.

#для_начинающих
Функция ptsname()

Функция ptsname() возвращает имя подчиненного псевдотерминального устройства, соответствующего главному устройству, на которое ссылается файловый дескриптор fd.

Функция ptsname_r() является реентерабельным эквивалентном ptsname(). Она сохраняет имя устройства подчинённого псевдо-терминала в виде строки (завершающейся null) в буфер, указанный в buf. В аргументе buflen задаётся количество байт, доступных в buf.

#для_начинающих
Функция div()

Функция div() вычисляет величину numerator/denominator и возвращает частное и остаток в структуре div_t, которая содержит два целочисленных поля (в неопределённом порядке) quot и rem. Частное округляется до ближайшего нуля. Результат равняется quot*denominator+rem = numerator.

Функции ldiv(), lldiv() и imaxdiv() выполняют эту же функцию, деля числа соответствующего типа и возвращая результат в структуре с соответствующим именем, всегда с полями quot и rem того же типа, что и аргументы функции.

#для_начинающих
Алгоритм random_shuffle

Он случайным образом переставляет элементы в диапазоне [первый, последний).

Алгоритм меняет значение каждого элемента на какой-либо другой случайно выбранный элемент.

Про различия между shuffle и random_shuffle можно почитать здесь.
Узнаем размер файла с помощью C++

В этом примере мы открываем файл example.txt с помощью ifstream, перемещаем указатель на конец файла с помощью функции seekg, а затем получаем текущую позицию (размер файла) с помощью функции tellg. Результат выводится на экран.
#вопросы_с_собеседований
Что выведет код сверху?

Ответ:
10 99 40 99

В этой программе мы меняем местами определенные значения в двух векторах с помощью iter_swap.
Видеоуроки по созданию игры на C++

Серия видео, в которой автор по шагам рассказывает, как написать свою игру на C++.

Смотреть статью
Преобразование списка в массив в C++

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

Другой способ преобразование можно найти здесь.
#вопросы_с_собеседований
Какие специальные функции-члены может генерировать сам компилятор? Напишите их сигнатуру?

Ответ:
Компилятор может сам генерировать шесть функций.

• Конструктор по умолчанию;
Object();
• деструктор;
~Object();
• копирующий конструктор;
Object(const Object& oth);
• оператор копирующего присваивания;
Object& operator=(const Object& oth);
• перемещающий конструктор;
Object(Object&& oth);
• оператор перемещающего присваивания;
Object& operator=(Object&& oth);
Алгоритм compare

Если вызывающая строка меньше строки s, то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s, функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.

Подробнее про алгоритм можно почитать здесь.
Удаление всех вхождений элемента в массив

В этом методе сдвиньте нецелевой элемент в левую сторону.

• Проверьте, является ли текущий элемент целевым элементом или нет.
• Если это целевой элемент, увеличьте переменную cnt.
• После этого элемента все нецелевые элементы сдвинутся влево с промежутком (n-cnt).

Временная сложность: O(n)
Сложность пространства: O(1)

На картинке приведена программа на C ++ для удаления всех вхождений элемента из массива с использованием оптимизированного подхода.
Туториал по Unreal Engine: C+

Blueprints — очень популярный способ создания геймплея в Unreal Engine 4. Однако если вы уже давно программируете и предпочитаете код, то вам идеально подойдёт C++. С помощью C++ можно даже вносить изменения в движок и создавать собственные плагины.

Смотреть статью
Быстрое нахождениe остатка от деления больших чисел для делителей специального вида

Смотреть статью
Алгоритм reverse_copy

Алгоритм копирует элементы из заданного диапазона, но в обратном порядке.

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

Чтобы сгенерировать случайное число используется функция rand(), которая размещается в библиотечном файле stdlib.h.

Функция возвращает случайное целочисленное значение, которое лежит в пределах от 0 до 32767.
Бьерн Страуструп: Почему я создал C++ (перевод)

Перевод интервью с Бьерном Страуструпом 2011 года, в котором он рассказывает как и почему он пришел к созданию языка программирования C++.

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

Move-конструктор — это специальный конструктор, который позволяет эффективно перемещать ресурсы из одного объекта в другой, без необходимости копирования данных.
Он используется для реализации семантики перемещения (move semantics) и оптимизации работы с временными объектами.

Move-конструктор принимает rvalue ссылку (&&) на объект, который будет перемещен, и выполняет простое копирование указателей на данные, а не их фактическое копирование.

Использование move-конструктора позволяет избежать лишних копирований данных и повысить производительность при работе с большими или ресурсоемкими объектами.
Понимаем обычное дерево отрезков

Пусть у нас есть задача: поступают запросы двух видов для исходного массива. Первый вид - это замена конкретного элемента на другой. Второй - вычисление суммы/минимума или другой операции на диапазоне. Требуется обработать эти запросы.

Дерево отрезков решает эту задачу и позволяет обновить элемент, и дать ответ по диапазону за логарифмическое время O(logN). Сама структура данных строится за линейное время O(N). Затраты по памяти - 4N. Почему это так рассмотрим в конце статьи.

Смотреть статью
Алгоритм distance

Возвращает расстояние до желаемой позиции от первого итератора. Эта функция очень полезна при поиске нужного нам индекса.