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

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

Концепт IterToComparable появился в стандарте C++20 и используется для проверки того, что итератор указывает на объекты, которые можно сравнивать.

Этот концепт позволяет убедиться, что можно сравнивать объекты, на которые ссылается итератор, с помощью операторов сравнения как <, <=, >, >=.

В примере используется концепт iter_to_comparable для проверки, что итератор по std::vector указывает на сравнимые объекты int. Это позволяет корректно найти минимальный элемент с помощью std::min_element.
#вопросы_с_собеседований
Что случится, если вернуть ссылку на временный объект?

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

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

Spaceship operator (<=>) — это оператор сравнения, введенный в C++20.

Преимущества spaceship operator:
— Позволяет создавать типы, которые можно сравнивать с помощью одного оператора вместо нескольких (==, !=, <, > и т. д.).
— Упрощает написание функций сравнения, например std::sort.
— Читабельнее и компактнее кода с традиционными операторами сравнения.
#вопросы_с_собеседований
Как подсчитать количество элементов в 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.