Sobes.tech
Назад к вопросам
Junior — Middle
94

Каким образом можно создать расширение или наследовать функциональность контейнера std::vector в C++?

Ответ от нейросети

sobes.tech AI

В C++ класс std::vector не предназначен для наследования, так как у него нет виртуального деструктора, и наследование может привести к неопределённому поведению.

Чтобы расширить функциональность std::vector, обычно используют композицию — создают свой класс, который содержит std::vector как член, и добавляют нужные методы:

#include <vector>

template<typename T>
class MyVector {
private:
    std::vector<T> data;
public:
    void push_back(const T& value) {
        data.push_back(value);
    }
    // Добавляем новые методы
    void print_all() const {
        for (const auto& item : data) {
            std::cout << item << " ";
        }
        std::cout << std::endl;
    }
    // Можно добавить доступ к элементам и другие методы
};

Если же наследование необходимо, то нужно быть осторожным и понимать риски, связанные с отсутствием виртуального деструктора в std::vector.