Шаблонный класс‑контейнер с операцией добавления

Если собственное управление памятью не требуется, используйте композицию со std::vector<T>. Метод push_back(const T&) скопирует переданный элемент и сохранит его в конце внутреннего контейнера.

Короткий ответ

Что ответить на собеседовании

Если собственное управление памятью не требуется, используйте композицию со std::vector<T>. Метод push_back(const T&) скопирует переданный элемент и сохранит его в конце внутреннего контейнера.

Подробный разбор

Ответ с пояснениями

Условие

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

template<typename T>
class MyVector {
public:
    void push_back(const T& elem);
};

Метод push_back должен принимать константную ссылку на объект типа T и обеспечивать его добавление в структуру данных.

Ответ

Если собственное управление памятью не требуется, используйте композицию со std::vector<T>. Метод push_back(const T&) скопирует переданный элемент и сохранит его в конце внутреннего контейнера.

#include <vector>
#include <cstddef>

template<class T>
class MyVector {
    std::vector<T> elements;
public:
    void push_back(const T& elem) {
        elements.push_back(elem);
    }
    std::size_t size() const noexcept {
        return elements.size();
    }
};

Такой интерфейс требует, чтобы T поддерживал нужное копирование. Если на собеседовании запрещено использовать vector внутри, необходимо дополнительно реализовать сырой буфер, размер, ёмкость, рост, уничтожение элементов и обработку исключений; одного поля T* недостаточно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее