C ++:运算符[]重载vector <>

时间:2018-06-25 13:47:27

标签: c++ operator-overloading operators overloading stdvector

我当前正在尝试在向量上重载运算符[]。我试图使该运算符在Matlab或Python中像负索引或大于向量长度的索引一样工作。我的问题不是得到正确的结果,而是实际重载运算符,因为我知道我将在重载代码中使用非重载的运算符。我需要用于特定类的向量,但是如果它适用于任何vector,那就更好了。

现在我的代码是: 标头:

MyClass std::vector::operator[](std::vector<MyClass> const vector,int const idx) const;

来源:

Myclass vector::operator[](vector<MyClass> const vector,int const idx) const {
    n=vector.size()
    if((idx>=0) && (idx<n)){
        return vector[idx];
    }
    else if(idx<0){
        return vector[n+idx%n]
    }
    else{
        return vector[idx%n]
    }
}

我得到了错误:

error: 'template<class _Tp, class _Alloc> class std::vector' used without template parameters
error: non-member function 'MyClass operator[](std::vector<MyClass>, int)' cannot have cv-qualifier
error: 'MyClass operator[](std::vector<MyClass>, int)' must be a nonstatic member function

很抱歉,如果这个问题已经讨论过,但是我找不到... 预先非常感谢您的回答!

1 个答案:

答案 0 :(得分:5)

您的错误与语法有关:

vector::operator[]

应该是

vector<MyClass>::operator[]

但是,您不能随意重新定义您不拥有的类的运算符。您可以做的是创建自己的MyVector类,该类从vector公开继承:

struct MyVector : std::vector<MyClass>
{
    MyClass& operator[](std::size_t index)
    { 
        // ...
    } 
};