⚙️ std::partial_sort
В C++ функция
C++ Learning 👩💻
В C++ функция
std::partial_sort из заголовка <algorithm> сортирует только часть контейнера, оставляя элементы до заданной позиции отсортированными, а остальные — в неопределённом порядке. Это эффективно, если нужно найти несколько наименьших или наибольших элементов.C++ Learning 👩💻
❓ Вопрос на собеседовании
Что такое
Ответ ⬇️
Метод emplace добавляет новый элемент в контейнер, создавая его непосредственно на месте, вместо создания временного объекта и его копирования (как в случае с push_back). Это повышает производительность, особенно при добавлении сложных объектов. Метод emplace вызывает конструктор объекта с переданными аргументами прямо в памяти контейнера.
Пример использования ⚙️
C++ Learning 👩💻
Что такое
emplace в C++ и чем оно отличается от push_back при работе с контейнерами STL?Ответ ⬇️
Пример использования ⚙️
#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 👩💻
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
C++ Learning 👩💻
Пояснение ⬇️
std::move преобразует объект obj1 в rvalue-ссылку. Это вызывает конструктор перемещения, который перемещает значение из obj1 в obj2. После перемещения obj1.value становится 0, а obj2.value — 10. Код компилируется и выполняется корректно.
C++ Learning 👩💻
❓ Вопрос на собеседовании
Что такое умные указатели в C++ (
Ответ ⬇️
Умные указатели в C++ автоматизируют управление памятью и помогают избежать утечек памяти. Они находятся в заголовке <memory>.
std::unique_ptr владеет ресурсом единолично. При уничтожении указателя ресурс освобождается.
std::shared_ptr позволяет нескольким указателям совместно владеть ресурсом. Ресурс освобождается, когда последний shared_ptr уничтожается.
std::weak_ptr предоставляет доступ к ресурсу, но не увеличивает счётчик ссылок. Используется для предотвращения циклических зависимостей.
Пример использования ⚙️
C++ Learning 👩💻
Что такое умные указатели в C++ (
std::unique_ptr, std::shared_ptr, std::weak_ptr), и чем они отличаются друг от друга?Ответ ⬇️
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 👩💻
🤔 Как это работает? — C++: Умные указатели
В C++ умные указатели помогают управлять памятью автоматически. Давайте разберёмся, как работает
➡️ Как это работает:
Когда последний
C++ Learning 👩💻
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.