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

C++: Operator [] overloading for vector<>

我目前正在尝试重载向量上的运算符 []。我试图让这个运算符像在 Matlab 或 Python 中一样工作,用于负索引或大于向量长度的索引。我的问题不是获得正确的结果,而是实际重载运算符,因为我知道我将在重载代码中使用 non-overloaded 运算符。我需要它用于特定 class 的向量,但如果它适用于任何 vector.

会更好

现在我的代码是: header:

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

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

您的错误与语法有关:

vector::operator[]

应该是

vector<MyClass>::operator[]

但是,您不能任意重新定义不属于您的 classes 的运算符。您可以做的是创建自己的 MyVector class 并公开继承自 vector:

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