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)
{
// ...
}
};
我目前正在尝试重载向量上的运算符 []
。我试图让这个运算符像在 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)
{
// ...
}
};