C++ Эволюция
2.72K subscribers
296 photos
2 videos
106 links
Обучающий канал по C++
Download Telegram
⚙️ std::partial_sort

В C++ функция std::partial_sort из заголовка <algorithm> сортирует только часть контейнера, оставляя элементы до заданной позиции отсортированными, а остальные — в неопределённом порядке. Это эффективно, если нужно найти несколько наименьших или наибольших элементов.

C++ Learning 👩‍💻
⚙️ std::merge

В C++ функция std::merge из заголовка <algorithm> объединяет два отсортированных диапазона в один отсортированный. Это полезно для слияния данных из двух контейнеров.

C++ Learning 👩‍💻
Вопрос на собеседовании

Что такое emplace в C++ и чем оно отличается от push_back при работе с контейнерами STL?

Ответ ⬇️
Метод emplace добавляет новый элемент в контейнер, создавая его непосредственно на месте, вместо создания временного объекта и его копирования (как в случае с push_back). Это повышает производительность, особенно при добавлении сложных объектов. Метод emplace вызывает конструктор объекта с переданными аргументами прямо в памяти контейнера.

Пример использования ⚙️
#include <iostream>
#include <vector>
#include <string>

class MyClass {
public:
MyClass(const std::string& name, int value) : name(name), value(value) {
std::cout << "Создан объект: " << name << " со значением " << value << "\n";
}

private:
std::string name;
int value;
};

int main() {
std::vector<MyClass> vec;

// Используем push_back
vec.push_back(MyClass("Object1", 10)); // Создаётся временный объект

// Используем emplace
vec.emplace_back("Object2", 20); // Объект создаётся сразу в контейнере

return 0;
}


C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

Пояснение ⬇️

std::move преобразует объект obj1 в rvalue-ссылку. Это вызывает конструктор перемещения, который перемещает значение из obj1 в obj2. После перемещения obj1.value становится 0, а obj2.value — 10. Код компилируется и выполняется корректно.


C++ Learning 👩‍💻
⚙️ std::generate_n

В C++ функция std::generate_n из заголовка <algorithm> используется для заполнения заданного количества элементов последовательности, используя функцию-генератор. Это удобно для инициализации контейнеров или создания данных на лету.

C++ Learning 👩‍💻
⚙️ std::find

В C++ функция std::find из заголовка <algorithm> используется для поиска первого вхождения заданного значения в диапазоне. Это полезно для работы с последовательными контейнерами, такими как массивы или векторы.

C++ Learning 👩‍💻
⚙️ std::any_of

В C++ функция std::any_of из заголовка <algorithm> проверяет, удовлетворяет ли хотя бы один элемент контейнера заданному условию. Это удобно для быстрого поиска в массиве или векторе.

C++ Learning 👩‍💻
⚙️ std::next_permutation

В C++ функция std::next_permutation из заголовка <algorithm> генерирует следующую лексикографическую перестановку элементов контейнера. Это полезно для решения задач комбинаторики и генерации всех возможных перестановок.

C++ Learning 👩‍💻
⚙️ std::any

В C++17 и выше std::any из заголовка <any> позволяет хранить значения любого типа. Это удобно, когда тип данных неизвестен во время компиляции или может меняться.

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

Пояснение ⬇️

Оператор == сравнивает значения value объектов. В данном случае 10 != 20, поэтому результат false. Затем оператор < возвращает true, так как 10 < 20. Поэтому вывод будет Less. Код компилируется и работает корректно.


C++ Learning 👩‍💻
⚙️ std::clamp

В C++17 и выше функция std::clamp из заголовка <algorithm> ограничивает значение заданным диапазоном. Это удобно для нормализации данных или защиты от выхода за пределы диапазона.

C++ Learning 👩‍💻
⚙️ std::thread

Класс std::thread из библиотеки C++11 позволяет создавать и управлять потоками, что важно для многозадачности и параллельных вычислений.

C++ Learning 👩‍💻
⚙️ std::swap()

Функция std::swap() из библиотеки <algorithm> используется для обмена значениями между двумя переменными. Это простая и эффективная операция, которая может быть полезна в различных алгоритмах и задачах.

C++ Learning 👩‍💻
✅️ GitHub теперь в Telegram!

Подписывайтесь:
Вопрос на собеседовании

Что такое умные указатели в C++ (std::unique_ptr, std::shared_ptr, std::weak_ptr), и чем они отличаются друг от друга?

Ответ ⬇️
Умные указатели в C++ автоматизируют управление памятью и помогают избежать утечек памяти. Они находятся в заголовке <memory>.

std::unique_ptr владеет ресурсом единолично. При уничтожении указателя ресурс освобождается.
std::shared_ptr позволяет нескольким указателям совместно владеть ресурсом. Ресурс освобождается, когда последний shared_ptr уничтожается.
std::weak_ptr предоставляет доступ к ресурсу, но не увеличивает счётчик ссылок. Используется для предотвращения циклических зависимостей.


Пример использования ⚙️
#include <iostream>
#include <memory>

int main() {
// unique_ptr: единоличное владение
std::unique_ptr<int> uptr = std::make_unique<int>(10);
std::cout << "unique_ptr: " << *uptr << "\n";

// shared_ptr: совместное владение
std::shared_ptr<int> sptr1 = std::make_shared<int>(20);
std::shared_ptr<int> sptr2 = sptr1; // sptr2 теперь также владеет ресурсом
std::cout << "shared_ptr: " << *sptr1 << ", use_count: " << sptr1.use_count() << "\n";

// weak_ptr: не увеличивает счётчик ссылок
std::weak_ptr<int> wptr = sptr1;
if (auto locked = wptr.lock()) {
std::cout << "weak_ptr: " << *locked << "\n";
}

return 0;
}


C++ Learning 👩‍💻
⚙️ std::ranges::for_each

В C++20 функция std::ranges::for_each из заголовка <algorithm> позволяет применять заданную функцию к элементам диапазона с учётом новой концепции Range-based. Это упрощает работу с контейнерами и итераторами.

C++ Learning 👩‍💻
⚙️ std::chrono

В C++ библиотека <chrono> предоставляет инструменты для измерения времени выполнения кода с высокой точностью. Это полезно для профилирования производительности и оптимизации.

C++ Learning 👩‍💻
🤔 Как это работает? — C++: Умные указатели std::shared_ptr

В C++ умные указатели помогают управлять памятью автоматически. Давайте разберёмся, как работает std::shared_ptr.

➡️ Как это работает:

• std::shared_ptr<MyClass> ptr1 создаёт умный указатель ptr1, который владеет объектом MyClass.
• ptr2 = ptr1 делает ptr2 ещё одним владельцем того же объекта.
• ptr1.use_count() возвращает количество умных указателей, владеющих объектом.

Когда последний std::shared_ptr перестанет существовать, объект будет автоматически удалён.

C++ Learning 👩‍💻
The owner of this channel has been inactive for the last 18 months. If they remain inactive for the next 8 days, they may lose their account and admin rights in this channel. The contents of the channel will remain accessible for all users.