ar
Feedback

لا تقع ضحية للمخادعين! تيليمتريو يكتشف ويُميّز هذه القنوات 👉 إذا كنت تريد رؤية العلامة، اشترك

C++ geek

C++ geek

الذهاب إلى القناة على Telegram

Учим C/C++ на примерах

إظهار المزيد
3 503
المشتركون
لا توجد بيانات24 ساعات
-27 أيام
-2630 أيام
أرشيف المشاركات
Трюки с логарифмом Функцию log тоже можно использовать для ряда изящных решений. ➡️ @cpp_geek
Трюки с логарифмом Функцию log тоже можно использовать для ряда изящных решений. ➡️ @cpp_geek

Упрощаем дебаг Определите оператор << для структур STL, чтобы упростить добавление отладочных выходов в ваш код. Это лу
Упрощаем дебаг Определите оператор << для структур STL, чтобы упростить добавление отладочных выходов в ваш код. Это лучше, чем стандартные функции вывода. Также определите соответствующий макрос. ➡️ @cpp_geek

Сложный расчет констант Использование констант – хороший тон. Это позволяет компилятору лучше оптимизировать код и делает его
Сложный расчет констант Использование констант – хороший тон. Это позволяет компилятору лучше оптимизировать код и делает его более явным. Но если вычисление слишком громоздкое, от модификатора const приходится отказываться. На помощь приходят лямбда-функции. ➡️ @cpp_geek

Бинарный поиск Чаще всего бинарный поиск (бинпоиск) используют, чтобы найти элемент в отсортированном массиве. Мы начинаем ис
Бинарный поиск Чаще всего бинарный поиск (бинпоиск) используют, чтобы найти элемент в отсортированном массиве. Мы начинаем искать с середины массива. Если находим то, что нужно, или если больше нечего рассматривать, мы останавливаемся. В противном случае мы решаем, в каком направлении — вправо или влево от середины — мы должны продолжить поиск. Так как пространство поиска после каждой проверки делится на два, то время выполнения алгоритма — O(log n). ➡️ @cpp_geek

Представления (Views) Представления — это просто-напросто диапазоны, которые дешево копировать и перемещать (за константное в
Представления (Views) Представления — это просто-напросто диапазоны, которые дешево копировать и перемещать (за константное время). Из-за этого представление не может владеть элементами, которые просматривает. Одно исключение — std::views::single, которому принадлежит единственный просматриваемый элемент. Представления компонуются во время компиляции с прицелом на то, что компилятор заинлайнит код. Например, следующий код последние последние три элемента диапазона. Сначала мы reverse’им диапазон, затем берем первые три элемента и, наконец, снова reverse’им диапазон (обратите внимание, что существует std::views::drop, который делает это напрямую). ➡️ @cpp_geek

Алгоритм iota Присваивает каждому элементу в диапазоне [first,last) последовательные значения val, как если бы они увеличивал
Алгоритм iota Присваивает каждому элементу в диапазоне [first,last) последовательные значения val, как если бы они увеличивались ++val после записи каждого элемента. ➡️ @cpp_geek

Строго-типизированный enum У «традиционных» перечислений в С++ есть некоторые недостатки: они экспортируют свои значения в ок
Строго-типизированный enum У «традиционных» перечислений в С++ есть некоторые недостатки: они экспортируют свои значения в окружающую область видимости (что может привести к конфликту имен), они неявно преобразовываются в целый тип и не могут иметь определенный пользователем тип. Эти проблемы устранены в С++11 с введением новой категории перечислений, названных strongly-typed enums. Они определяются ключевым словом enum class. Они больше не экспортируют свои перечисляемые значения в окружающую область видимости, больше не преобразуются неявно в целый тип и могут иметь определенный пользователем тип (эта опция так же добавлена и для «традиционных» перечислений). ➡️ @cpp_geek

Алгоритм copy_n Используется для копирования элементов из одного контейнера в другой. ➡️ @cpp_geek
Алгоритм copy_n Используется для копирования элементов из одного контейнера в другой. ➡️ @cpp_geek

range-based циклы В С++11 была добавлена поддержка парадигмы for each для итерации по набору. В новой форме возможно выполнят
range-based циклы В С++11 была добавлена поддержка парадигмы for each для итерации по набору. В новой форме возможно выполнять итерации в случае, если для объекта итерации перегружены методы begin() и end(). Это полезно, когда вы просто хотите получить элементы массива/контейнера или сделать с ними что-то, не заботясь об индексах, итераторах или кол-ве элементов. ➡️ @cpp_geek

Является ли число степенью двойки Мы можем проверить, является ли число степенью двойки или нет напрямую, используя код выше.
Является ли число степенью двойки Мы можем проверить, является ли число степенью двойки или нет напрямую, используя код выше. ➡️ @cpp_geek

nullptr Раньше для обнуления указателей использовался макрос NULL, являющийся нулем — целым типом, что, естественно, вызывало
nullptr Раньше для обнуления указателей использовался макрос NULL, являющийся нулем — целым типом, что, естественно, вызывало проблемы (например, при перегрузке функций). Ключевое слово nullptr имеет свой собственный тип std::nullptr_t, что избавляет нас от бывших проблем. Существуют неявные преобразования nullptr к нулевому указателю любого типа и к bool (как false), но преобразования к целочисленных типам нет. ➡️ @cpp_geek

Ссылки в C++ Когда переменная объявляется как ссылка, она становится альтернативным именем для существующей переменной. Перем
Ссылки в C++ Когда переменная объявляется как ссылка, она становится альтернативным именем для существующей переменной. Переменную можно объявить как ссылку, поместив в её объявление "&". ➡️ @cpp_geek

Как включить все стандартные библиотеки одной командой Чтобы разом включить в проект все стандартные библиотеки, используйте
Как включить все стандартные библиотеки одной командой Чтобы разом включить в проект все стандартные библиотеки, используйте #include <bits/stdc++.h>. Это особенно полезно в условиях дефицита времени на соревнованиях по программированию. Но помните, что: #include <bits/stdc++.h> содержит множество заголовочных файлов, которые, возможно, и не понадобятся в конкретном проекте. А это может привести к увеличению времени компиляции. #include <bits/stdc++.h> не является стандартным заголовочным файлом библиотеки GNU C++. Таким образом, не относящиеся к типу GCC (GNU Compiler Collection) компиляторы могут испытывать затруднения в процессе исполнения. Однако так бывает не часто! ➡️ @cpp_geek

Использование emplace_back вместо push_back В C++ 11 emplace_back работает так же, как push_back, добавляя элементы в конец в
Использование emplace_back вместо push_back В C++ 11 emplace_back работает так же, как push_back, добавляя элементы в конец вектора. emplace_back работает быстрее, так как push_back сначала создает временную переменную, а затем добавляет ее в конец вектора. ➡️ @cpp_geek

Вы можете написать функцию, которая будет возвращать два и более значений, с помощью std::tuple и std::tie. ➡️ @cpp_geek
Вы можете написать функцию, которая будет возвращать два и более значений, с помощью std::tuple и std::tie. ➡️ @cpp_geek

Длина числа Для вычисления количества цифр в числе вместо цикла можно эффективно использовать log. ➡️ @cpp_geek
Длина числа Для вычисления количества цифр в числе вместо цикла можно эффективно использовать log. ➡️ @cpp_geek

В С++11 появилась такая классная штука, как цикл for, основанный на диапазоне. Например, вам не придётся писать for (int i =
В С++11 появилась такая классная штука, как цикл for, основанный на диапазоне. Например, вам не придётся писать for (int i = 0; i < v.size(); i++), потому что теперь есть for (auto &e : v). Он очень полезен при обходе std::set или std::map. ➡️ @cpp_geek

Токенизация строки Токенизация строки означает разделение строки относительно некоторого разделителя (разделителей). Есть мно
Токенизация строки Токенизация строки означает разделение строки относительно некоторого разделителя (разделителей). Есть много способов этого добиться. Рассмотрим пример с функцией strtok(). Она разбивает строку по указанным разделителям и должна быть вызвана в цикле, на каждой итерации возвращая следующую часть. В конце возвращает NULL. ➡️ @cpp_geek

Указатели с ключевыми словами const и volatile Ключевые слова const и volatile изменяют то, как обрабатываются указатели. con
Указатели с ключевыми словами const и volatile Ключевые слова const и volatile изменяют то, как обрабатываются указатели. const указывает, что данные по указателю не могут быть изменены после инициализации; volatile указывает, что значение может быть изменено действиями, отличными от тех, которые указаны в пользовательском приложении. volatile полезно для объявления объектов в общей памяти, к которым могут обращаться несколько процессов или для глобальных областей данных. ➡️ @cpp_geek

Функция strrchr() В C++ strrchr() - это предопределенная функция, используемая для обработки строк. Эта функция возвращает ук
Функция strrchr() В C++ strrchr() - это предопределенная функция, используемая для обработки строк. Эта функция возвращает указатель на всю строку после последнего появления заданного символа. Символ, последнее вхождение которого мы хотим найти, передается в качестве второго аргумента функции, а строка, в которой мы должны найти этот символ, передается в качестве первого аргумента функции. В примере кода на картинке мы используем функцию для того, чтобы найти порядковый номер символа в заданной строке. ➡️ @cpp_geek