如何覆盖 STL 容器函数

how to override STL container function

本文关键字:STL 函数 覆盖 何覆盖      更新时间:2023-10-16

有可能使用相同的参数覆盖某些函数 stl 容器吗? 我想用一些内部功能if完全push_back覆盖。 我尝试,但是,总是有关于该函数的错误/信息在矢量中。

覆盖意味着您将从STL容器继承。别这样!STL容器不是为从它们继承而设计的。


作为一种选择,您可以将std::vector封装到某个包装类中,并在推送之前执行其他功能,例如:

template<typename T>
class Wrapper
{
public:
template<typename U>
void push(U&& e)
{
// some additional processing
data.push_back(std::forward<U>(e));
}
private:
std::vector<T> data;
};

STL 容器的继承是一种糟糕的方法。向量不应该有派生类。向量和虚拟析构函数中没有虚拟方法(最后一个可能会产生很多问题)。 您可以创建自己的类并使用向量作为成员。

你不能那样做。std库中的大多数类都不是要继承的。但是,与其"从内部"更改它,不如"从外部"进行更改,例如:

template<typename T> myPush(std::vector<T>& v,T element) {
if (someCondition()) { v.push(element); }
}

或者,您可以这样做:

struct MyCustomVector {
void my_push( T element);
/* pulic or private: */          // depends on what you want/need
std::vector<T> vect;
};