👩💻 Задача по C++: Удаление дубликатов из вектора с сохранением порядка
Напишите функцию, которая принимает
Пример:
Решение задачи на картинке ☝
C++ Learning 👩💻
Напишите функцию, которая принимает
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 👩💻
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
C++ Learning 👩💻
Пояснение ⬇️
Метод show в Base объявлен как виртуальный, поэтому вызов obj->show() через указатель Base* вызывает переопределённую версию Derived show. Однако метод display не виртуальный, поэтому вызов obj->display() вызывает версию из Base. Код компилируется и работает корректно.
C++ Learning 👩💻
⚙️ 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 👩💻