Если собственное управление памятью не требуется, используйте композицию со 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* недостаточно.