Итераторы-адаптеры - это классы, которые оборачивают стандартные итераторы и предоставляют дополнительные возможности или изменяют их поведение.
•
Итераторы-адаптеры предоставляют дополнительные возможности для работы с итераторами, такие как итерация в обратном порядке или фильтрация элементов.•
Использование итераторов-адаптеров позволяет упростить код и делает его более читаемым за счет высокоуровневого интерфейса.•
Итераторы-адаптеры добавляют гибкость в работу с контейнерами, позволяя выполнять сложные операции и манипуляции с элементами.Please open Telegram to view this post
VIEW IN TELEGRAM
•
Использование private и public при наследовании в C++ позволяет контролировать доступ к членам базового класса в производных классах.•
Это может быть полезно для сокрытия частей реализации базового класса от внешнего мира или ограничения доступа к членам в иерархии классов.•
Эта фишка особенно полезна при проектировании классов и их взаимодействия, позволяя более гибко управлять доступом к данным и методам в рамках наследования.Please open Telegram to view this post
VIEW IN TELEGRAM
•
Типобезопасные перечисления, которые решают множество проблем с C-перечислениями, включая неявные преобразования, арифметические операции, невозможность указать базовый тип, загрязнение области видимости и т.д.Please open Telegram to view this post
VIEW IN TELEGRAM
Lambda-функции — это мощный инструмент в C++, позволяющий определять анонимные функции прямо в месте их использования.
•
Они особенно полезны для создания компактного и читаемого кода, например, при работе с алгоритмами из стандартной библиотеки (STL).Please open Telegram to view this post
VIEW IN TELEGRAM
•
Переопределение ключевых слов — плохая практика программирования, но это возможно через препроцессор. Это может вводить баги, например, #define true false
или #define else
.#define int float
#define float char
•
Такой код будет работать, хотя это может быть полезно в некоторых ситуациях. Например, если мы используем большую библиотеку и не хотим публичного наследования, мы можем временно отключить защиту доступа перед подключением заголовков библиотеки, а затем снова включить её.#define public private
#include "mylibrary.h"
#undef private
•
Это позволяет управлять доступом к библиотеке без её изменения, но требует осторожности.Please open Telegram to view this post
VIEW IN TELEGRAM
Туториал по Unreal Engine: C+
Blueprints — очень популярный способ создания геймплея в Unreal Engine 4. Однако если вы уже давно программируете и предпочитаете код, то вам идеально подойдёт C++. С помощью C++ можно даже вносить изменения в движок и создавать собственные плагины.
Смотреть статью
Blueprints — очень популярный способ создания геймплея в Unreal Engine 4. Однако если вы уже давно программируете и предпочитаете код, то вам идеально подойдёт C++. С помощью C++ можно даже вносить изменения в движок и создавать собственные плагины.
Смотреть статью
Удаление всех вхождений элемента в массив
В этом методе сдвиньте нецелевой элемент в левую сторону.
• Проверьте, является ли текущий элемент целевым элементом или нет.
• Если это целевой элемент, увеличьте переменную cnt.
• После этого элемента все нецелевые элементы сдвинутся влево с промежутком (n-cnt).
Временная сложность: O(n)
Сложность пространства: O(1)
На картинке приведена программа на C ++ для удаления всех вхождений элемента из массива с использованием оптимизированного подхода.
В этом методе сдвиньте нецелевой элемент в левую сторону.
• Проверьте, является ли текущий элемент целевым элементом или нет.
• Если это целевой элемент, увеличьте переменную cnt.
• После этого элемента все нецелевые элементы сдвинутся влево с промежутком (n-cnt).
Временная сложность: O(n)
Сложность пространства: O(1)
На картинке приведена программа на C ++ для удаления всех вхождений элемента из массива с использованием оптимизированного подхода.
Алгоритм compare
Если вызывающая строка меньше строки s, то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s, функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.
Подробнее про алгоритм можно почитать здесь.
Если вызывающая строка меньше строки s, то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s, функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.
Подробнее про алгоритм можно почитать здесь.
#вопросы_с_собеседований
Какие специальные функции-члены может генерировать сам компилятор? Напишите их сигнатуру?
Ответ:
Компилятор может сам генерировать шесть функций.
• Конструктор по умолчанию;
Object();
• деструктор;
~Object();
• копирующий конструктор;
Object(const Object& oth);
• оператор копирующего присваивания;
Object& operator=(const Object& oth);
• перемещающий конструктор;
Object(Object&& oth);
• оператор перемещающего присваивания;
Object& operator=(Object&& oth);
Какие специальные функции-члены может генерировать сам компилятор? Напишите их сигнатуру?
Ответ:
• Конструктор по умолчанию;
Object();
• деструктор;
~Object();
• копирующий конструктор;
Object(const Object& oth);
• оператор копирующего присваивания;
Object& operator=(const Object& oth);
• перемещающий конструктор;
Object(Object&& oth);
• оператор перемещающего присваивания;
Object& operator=(Object&& oth);
Видеоуроки по созданию игры на C++
Серия видео, в которой автор по шагам рассказывает, как написать свою игру на C++.
Смотреть статью
Серия видео, в которой автор по шагам рассказывает, как написать свою игру на C++.
Смотреть статью
#вопросы_с_собеседований
Что выведет код сверху?
Ответ:
10 99 40 99
В этой программе мы меняем местами определенные значения в двух векторах с помощью iter_swap.
Что выведет код сверху?
Ответ:
В этой программе мы меняем местами определенные значения в двух векторах с помощью iter_swap.
Функция div()
Функция
Функции
#для_начинающих
Функция
div()
вычисляет величину numerator/denominator
и возвращает частное и остаток в структуре div_t
, которая содержит два целочисленных поля (в неопределённом порядке) quot
и rem
. Частное округляется до ближайшего нуля. Результат равняется quot*denominator+rem = numerator
.Функции
ldiv()
, lldiv()
и imaxdiv()
выполняют эту же функцию, деля числа соответствующего типа и возвращая результат в структуре с соответствующим именем, всегда с полями quot
и rem
того же типа, что и аргументы функции.#для_начинающих
Функция ptsname()
Функция
Функция
#для_начинающих
Функция
ptsname()
возвращает имя подчиненного псевдотерминального устройства, соответствующего главному устройству, на которое ссылается файловый дескриптор fd
.Функция
ptsname_r()
является реентерабельным эквивалентном ptsname()
. Она сохраняет имя устройства подчинённого псевдо-терминала в виде строки (завершающейся null) в буфер, указанный в buf
. В аргументе buflen
задаётся количество байт, доступных в buf
.#для_начинающих
Библиотека <pty.h>
Библиотека
#для_начинающих
Библиотека
<pty.h>
используется для работы с псевдотерминалами (PTY — Pseudo Terminal). Псевдотерминалы предоставляют средство для создания пары устройств, одно из которых может использоваться как мастер (master), а другое как рабочее (slave). Процессы могут обмениваться данными между этими устройствами, эмулируя терминальные взаимодействия.#для_начинающих
«Код-ревью — это когда твои комментарии в интернете действительно читают»: дискуссия с разработчиками на C++
Смотреть статью
Смотреть статью
Хабр
«Код-ревью — это когда твои комментарии в интернете действительно читают»: дискуссия с разработчиками на C++
Заходят как‑то на Хабр С++ разработчики из крупных компаний, а у них спрашивают: что такое код‑ревью и используют ли они спецификатор final. Эти и другие вопросы...
#вопросы_с_собеседований
Как работает механизм перегрузки операторов в C++ и какие ограничения существуют при его использовании?
В C++, перегрузка операторов позволяет программистам определять поведение стандартных операторов (например, +, -, *, /) для пользовательских типов данных. Это делается путем определения функций или методов класса с специальным именем: operatorX, где X - это оператор, который нужно перегрузить. Однако существуют ограничения: нельзя перегружать операторы для встроенных типов данных (только если одним из операндов является пользовательский тип), нельзя создавать новые операторы, и некоторые операторы (например, ?:, .) не подлежат перегрузке. Перегрузка операторов должна использоваться с осторожностью, чтобы не нарушить интуитивные ожидания от работы этих операторов.
Как работает механизм перегрузки операторов в C++ и какие ограничения существуют при его использовании?
Функция std::count
Функция
#для_начинающих
Функция
std::count
используется для подсчета количества элементов в диапазоне, которые совпадают с заданным значением. Она работает с итераторами, что позволяет использовать ее с различными типами контейнеров, таких как массивы, векторы, списки и т.д.#для_начинающих