C++ geek
3.58K subscribers
254 photos
3 videos
18 links
Учим C/C++ на примерах
Download Telegram
Что быстрее постфиксные инкрементные операторы или префиксные? Чем отличается их сигнатура?

Префиксные операторы быстрее. В постфиксных операторах производится дополнительная операция сохранения предыдущего состояния объекта, а затем только увеличение на 1, а в префиксном операторе после инкрементирования объекта, сразу возвращается ссылка объект.

Сигнатура их отличается фиктивным параметром int у постфиксного оператора.

➡️ @cpp_geek
👍7
Алгоритм move_backward

Перемещает элементы одного итератора в другой.

Перемещение начинается с последнего элементом в указанном диапазоне и завершается первым элементом в этом диапазоне.

➡️ @cpp_geek
👍31
Алгоритм partial_sort

Используется для сортировки не всего диапазона, а только его части.

Он переставляет элементы в диапазоне [first, last) таким образом, что элементы до середины сортируются в порядке возрастания, тогда как элементы после середины остаются без какого-либо определенного порядка.

➡️ @cpp_geek
3
Чем перегрузка функций отличается от перегрузки оператора?

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

➡️ @cpp_geek
👎1🤔1
Текущая дата и время

Предположим, вы хотите получить текущую системную дату и время, либо в качестве локального времени, либо в качестве скоординированного универсального времени (UTC).

Выше приведен пример для достижения обоих целей.

➡️ @cpp_geek
👍61
Обмен значений двух переменных с помощью XOR

Этот метод является быстрым и не требует использования 3-й переменной.

➡️ @cpp_geek
42👍2
Чтение и отображение изображения в OpenCV с использованием C ++

Как мы видим нам потребовалось включить пространства имен cv, которое содержит все функции, классы и структуры данных OpenCV.

➡️ @cpp_geek
2👍1
Как проверить скорость выполнения кода на C++?

Ответ на картинке.

➡️ @cpp_geek
👍91
Удаление всех вхождений элемента в массив

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

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

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

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

➡️ @cpp_geek
👍41
Как работает std::unique_ptr?

std::unique_ptr — это умный указатель (smart pointer), предназначенный для управления динамически выделенными объектами. Он обеспечивает автоматическое освобождение памяти при выходе объекта из области видимости или при необходимости.

Принцип работы std::unique_ptr заключается в том, что он владеет указателем на выделенную память и следит за временем жизни этой памяти.

Когда объект std::unique_ptr выходит из области видимости, он автоматически освобождает память, на которую он указывает, путем вызова оператора delete для хранящегося указателя.

➡️ @cpp_geek
👍8
Для чего используется вызов throw без аргументов?

Для повторного возбуждения предыдущего исключения и направления его следующему обработчику.

➡️ @cpp_geek
👍32
Range-based циклы

В С++11 была добавлена поддержка парадигмы for each для итерации по набору. В новой форме возможно выполнять итерации в случае, если для объекта итерации перегружены методы begin() и end().

Это полезно, когда вы просто хотите получить элементы массива/контейнера или сделать с ними что-то, не заботясь об индексах, итераторах или кол-ве элементов.

➡️ @cpp_geek
👍52🤔1🥱1
Примеры C++ кода до и после Ranges

Измените несортированный диапазон, чтобы он сохранял только уникальные значения, но в обратном порядке.

➡️ @cpp_geek
👍62🤡2
Преобразование списка в массив в C++

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

➡️ @cpp_geek
👍5🥱41
Что не так в этом отрывке кода на С++?

operator int() const {
return *this;
}

Выше приведен полный код для проверки.

Ответ:
Он скомпилируется, хотя некоторые компиляторы могут кинуть warning, сразу же объясняющий в чём суть ошибки. Но вот при запуске вы словите stack overflow. Дело в том, что operator int будет пытаться привести возвращаемое значение к типу int, что вполне можно сделать, ведь для текущего объекта у нас есть замечательный operator int, который это и делает. Т.е. функцию вызовет сама себя и будет продолжать это делать рекурсивно, пока не переполнится стек.

➡️ @cpp_geek
👍122
Алгоритм reverse_copy

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

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

➡️ @cpp_geek
👍5🥱411
Функция isalpha()

Функция isalpha() в С++ проверяет, является ли данный символ буквой или нет.

Синтаксис:
isalpha(int ch).

Возвращаемое значение:
Функция возвращает ненулевое значение, если ch – буква и ноль, если ch не буква.

➡️ @cpp_geek
👍72🤮1🤨1
Преобразование вектора в массив

Для этого есть довольно простой трюк, поскольку спецификация теперь гарантирует, что векторы хранят свои элементы последовательно.

➡️ @cpp_geek
👍5🤮4🤔21
В чем проблема со следующим кодом?
class A
{
public:
A() {}
~A(){}
};
class B: public A
{
public:
B():A(){}
~B(){}
};
int main(void)
{
A* a = new B();
delete a;
}

Поведение не определено, потому что деструктор A не является виртуальным.

👉 @cpp_geek
👍31👎1
Алгоритм rotate

Меняет местами элементы в диапазоне [first, last) таким образом, что элемент n_first становится первым в новом диапазоне, а n_first-1 — последним.

Параметры:
first, last - диапазон элементов для изменения их порядка.
n_first - элемент, который должен стать первым в новом диапазоне.

👉 @cpp_geek
5👍3