C++ Эволюция
2.72K subscribers
296 photos
2 videos
106 links
Обучающий канал по C++
Download Telegram
👩‍💻 Задача по C++: Удаление дубликатов из вектора с сохранением порядка

Напишите функцию, которая принимает std::vector и возвращает новый std::vector, содержащий только уникальные элементы, сохраняя их порядок появления.

Пример:

#include <iostream>
#include <vector>

int main() {
std::vector<int> numbers = {1, 2, 2, 3, 4, 3, 5, 1};
auto result = removeDuplicates(numbers);

for (int num : result) {
std::cout << num << " ";
}
// Ожидаемый результат: 1 2 3 4 5
return 0;
}


Решение задачи на картинке

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 👩‍💻
Вопрос на собеседовании

Что такое умные указатели в 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 👩‍💻