C++ 如何重写STL容器函数

C++ 如何重写STL容器函数,c++,stl,C++,Stl,是否有可能用相同的参数覆盖某些函数stl容器? 我想要用一些if内部函数完全覆盖push_back。 我尝试过,但总是有错误/关于该函数的信息在vector中。STL容器的继承是一种糟糕的方法。向量不应该有派生类。向量和虚拟析构函数中没有虚拟方法(最后一个方法可能会产生很多问题)。 您可以创建自己的类并使用vector作为成员 STL容器的继承是一种糟糕的方法。向量不应该有派生类。向量和虚拟析构函数中没有虚拟方法(最后一个方法可能会产生很多问题)。 您可以创建自己的类并使用vector作为成员

是否有可能用相同的参数覆盖某些函数stl容器? 我想要用一些
if
内部函数完全覆盖
push_back

我尝试过,但总是有错误/关于该函数的信息在vector中。

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

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

重写意味着您将从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;
};
模板
类包装器
{
公众:
模板
无效推送(U&e)
{
//一些附加处理
数据。向后推(标准::向前(e));
}
私人:
std::矢量数据;
};

重写意味着您将从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;
};
模板
类包装器
{
公众:
模板
无效推送(U&e)
{
//一些附加处理
数据。向后推(标准::向前(e));
}
私人:
std::矢量数据;
};

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

template<typename T> myPush(std::vector<T>& v,T element) {
    if (someCondition()) { v.push(element); }
}
模板myPush(std::vector&v,T元素){ if(someCondition()){v.push(元素);} } 或者,您可以这样做:

struct MyCustomVector {
     void my_push( T element);
     /* pulic or private: */          // depends on what you want/need
     std::vector<T> vect;
};
struct MyCustomVector{
无效我的推(T元素);
/*公共或私人:///取决于您想要/需要什么
std::vector-vect;
};

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

template<typename T> myPush(std::vector<T>& v,T element) {
    if (someCondition()) { v.push(element); }
}
模板myPush(std::vector&v,T元素){ if(someCondition()){v.push(元素);} } 或者,您可以这样做:

struct MyCustomVector {
     void my_push( T element);
     /* pulic or private: */          // depends on what you want/need
     std::vector<T> vect;
};
struct MyCustomVector{
无效我的推(T元素);
/*公共或私人:///取决于您想要/需要什么
std::vector-vect;
};

不,您不能更改向量。听起来像是XY的问题。你真正需要完成的是什么?你不能把你需要做的检查放在功能之外吗,因此,您只需在匹配正确条件的情况下调用
push_back
?如果您的代码出现编译器错误,请发布生成该错误的。我希望检查大小元素,它是
push_back
,并在容器执行某些条件时添加。不,您不能更改
vector
。听起来像是XY的问题。你真正需要完成的是什么?你不能把你需要做的检查放在功能之外吗,因此,您只需在匹配正确条件的情况下调用
push_back
?如果您的代码出现编译器错误,请发布生成该错误的。我希望检查大小元素,即
push_back
到容器中,并在他执行某些条件时添加。