Изучаем C++. По вопросам сотрудничества: @adv_and_pr
256 строчек голого C++: пишем трассировщик лучей с нуля за несколько часов.
https://habr.com/ru/post/436790/
C++ для Maya
Создание кастомного локатора. В этой статье автор делится опытом, который приобрел при написании плагина на C++ для Maya.
Смотреть статью
#вопросы_с_собеседований
Что выведет код сверху?
Ответ:
Class B
Программа верна, поэтому ошибки не возникает, следовательно, программа выполняется успешно, и b вызывает функцию is func(), поэтому выводится “Класс B”.
Алгоритм nth_element
Перестраивает список таким образом, что элемент в n-й позиции — это тот элемент, который должен быть в этой позиции, если мы сортируем список.
Кодогенератор Waffle++ для C++
Кодогенератор это программа, которая на основе исходного кода или какого-нибудь файла настроек генерирует вспомогательный код, который потом компилируется вместе с исходным кодом.
Смотреть статью
Сonstexpr
Допустим, у вас есть выражение, значение которого нужно вычислить и которое не будет меняться после этого. Вы можете вычислить значение заранее и использовать его как макрос. Или, как предлагает C++11, вы можете использовать constexpr.
Программисты сокращают время работы программы насколько возможно. Например, некоторые операции перекладываются на компилятор.
Код выше — довольно частый пример использования constexpr.
Так как мы объявили функцию вычисления чисел Фибоначчи как constexpr, компилятор вычислит значение fib(20) во время компиляции. Тогда после компиляции строка const long long bigval = fib(20); будет заменена на const long long bigval = 2432902008176640000.
Задача
Для каждого из чисел второй последовательности найдите ближайшее к нему в первой.
В первой строке входных данных содержатся числа N и K (). Во второй строке задаются N чисел первого массива, отсортированного по неубыванию, а в третьей строке – K чисел второго массива. Каждое число в обоих массивах по модулю не превосходит 2⋅10**9.
Для каждого из K чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному. Если таких несколько, выведите меньшее из них.
Задача: Встречалось ли число раньше
Во входной строке записана последовательность чисел через пробел. Для каждого числа выведите слово YES (в отдельной строке), если это число ранее встречалось в последовательности или NO, если не встречалось.
Функция unique
unique используется для удаления дубликатов любого элемента, присутствующего последовательно в диапазоне [first, last). Он выполняет эту задачу для всех подгрупп, присутствующих в диапазоне, имеющих один и тот же элемент, присутствующий последовательно.
Функция any_of
Эта функция проверяет заданный диапазон, если хотя бы один элемент удовлетворяет заданному свойству, указанному в функции. Возвращает true, если хотя бы один элемент удовлетворяет свойству, иначе возвращает false.
В приведенном выше коде -6 делает условие положительным.
Вывод: There exists a negative element
#вопросы_с_собеседований
Опишите выделение памяти и их отличия?
• Статическое выделение памяти - выделяется редактором связей и существует, пока выполняется программа;
• Память в стеке - автоматическая память. Выделяется при вызове функции для хранения локальных объектов и очищается автоматически после выхода этих объектов из зоны видимости, то есть после возвращения управления из функции;
• Память в куче - динамическая память. Объекты создаются с помощью оператора new и должны быть уничтожены с помощью вызова оператора delete самим программистом.
Создатель C++ ответил на 5 самых популярных вопросов по C++ со Stack Overflow
Смотреть статью
Алгоритм set_intersection
Создает отсортированную последовательность из элементов, встречающихся в обеих последовательностях – [first1, last1) и [first2, last2).
#вопросы_с_собеседований
В чем разница между struct и class?
Ответ: Практически ни в чем. В struct модификаторы доступа по умолчанию public, в class private. Также отличается и наследование по умолчанию, у struct — public, у class — private.
SFML
SFML (Simple and Fast Multimedia Library) — одна из самых удобных и быстрых графических библиотек для C++. Её неоспоримое преимущество — минимальные требования к уровню знаний языка и лёгкость освоения: всего за несколько дней можно написать вполне полноценную программу. К примеру, первое графическое приложение «SFML works!» можно написать всего за минуту. Ещё одно преимущество — кроссплатформенность: SFML работает под Windows, Linux (только X11, но не Wayland) и Mac OS.
SFML библиотека используется по большей части небольшими стартапами и программистами, для которых создание игр — хобби. SFML популярен среди небольших команд благодаря тому, что разработка графической части программы не требует написания больших объёмов кода.
Попробуйте пройти начальный курс.
❓ Хотите стать Middle-разработчиком на C++?
Тогда скажите «да» новым навыкам!
📢📢 Приходите 8 февраля в 20:00 мск на открытый урок «C++: STL Алгоритмы». На занятии мы разберемся, какие основные алгоритмы включены в STL и познакомимся с алгоритмами поиска и сортировки.
🟠Больше знаний ждет вас на онлайн-курсе «C++ Developer. Professional» в OTUS для Junior-программистов. Есть возможность оплаты в рассрочку.
➡️ Для участия в вебинаре пройдите вступительный тест: https://otus.pw/QPpb/Реклама. Информация о рекламодателе на сайте otus.ru
Нестандартный полиморфизм. Паттерн Type Erasure
Смотреть статью
Список курсов и туториалов по С++.
https://eduwyre.com/learn/cpp
Перемешиваем элементы массива
На картинке представлены 2 варианта, с помощью которых вы можете с легкостью перемешать элементы своего массива
Алгоритм search
Ищет последовательность [first1, last1) для первого вхождения подпоследовательности, определенной [first2, last2), и возвращает итератор в свой первый элемент вхождения, или last1, если вхождения не найдены.
Упорядочиваем 3 числа
С помощью функции swap переставляем 3 числа в порядке возрастания.
Задача
Напишите функцию, которая принимает вектор и удаляет из него нули, а ненулевые элементы оставляет в прежнем порядке. В реализации нельзя использовать циклы.
Алгоритм fill
Присваивает всем элементам в диапазоне [first,last) заданное значение.
Функция find_first_of
Ищет в строке первый символ, который соответствует любому из символов, указанных в его аргументах.
Когда задан pos , поиск включает только символы в позиции pos или после нее , игнорируя любые возможные вхождения перед pos .
#вопросы_с_собеседований
Когда Вы должны использовать список инициализации?
Ответ:
1) когда в классе есть ссылки,
2) когда есть константы,
3) когда у базового и выведенного класса есть конструктор с набором аргументов.
Запретный C++: знания, которые не должны были существовать
Так о C++ не рассказывал ещё никто. История длиной 30 минут, в которой вы узнаете о примерах кода на C++, воплощающих само Великое Зло.
02:00 Глобальные переменные.
08:00 Макросы.
12:36 Goto.
16:20 Указатель void *.
22:17 using namespace std.
27:19 New и Delete.
https://youtu.be/j0_u26Vpb4w
Для чего нужен аллокатор и как создать свой собственный аллокатор?
Аллокатор это шаблонный класс, который отвечает за выделение памяти и создание объектов. По умолчанию все контейнера используют std::allocator<T>.
В языке c++ имеется так же возможность написать свой аллокатор. У своего алокатора должно быть такое объявление(см картинку).
Общие хитрости для C++
Никогда не используйте INT_MAX в качестве бесконечности для целых чисел. В некоторых алгоритмах, например, Флойда–Уоршелла, используются значения вроде ∞+w, что приведёт к переполнению при использовании INT_MAX. Вместо этого лучше использовать int oo = 0x3f3f3f3f, поскольку:
• Это число достаточно большое для задач, связанных с целыми числами;
• 2 * oo не приведёт к переполнению;
• Все байты равны, поэтому вы без проблем можете использовать memset(array, oo, sizeof(array));
• Его довольно легко запомнить.
Однако будьте осторожны: не используйте 0x3f3f3f3f для long long, так как в таком случае фокус уже не пройдёт, и вы потом потратите кучу времени на поиск ошибки.
Макрос watch
Макрос watch — один из самых полезных приёмов.
При отладке кода watch(переменная) выведет имя переменной и её значение.
114 стандартных алгоритмов C++ — введение.
https://itnext.io/the-114-standard-c-algorithms-introduction-2a75a2df4300