C++ C++;:向量的运算符[]重载<&燃气轮机;
我当前正在尝试在向量上重载运算符C++ C++;:向量的运算符[]重载<&燃气轮机;,c++,operator-overloading,operators,overloading,stdvector,C++,Operator Overloading,Operators,Overloading,Stdvector,我当前正在尝试在向量上重载运算符[]。我试图让这个操作符像在Matlab或Python中一样处理负索引或大于向量长度的索引。我的问题不是得到正确的结果,而是实际重载运算符,因为我知道我将在重载代码中使用非重载运算符。我需要它用于特定类的向量,但如果它适用于任何向量,它会更好 现在我的代码是: 标题: MyClass std::vector::operator[](std::vector const vector,int const idx)const; 资料来源: Myclass vector
[]
。我试图让这个操作符像在Matlab或Python中一样处理负索引或大于向量长度的索引。我的问题不是得到正确的结果,而是实际重载运算符,因为我知道我将在重载代码中使用非重载运算符。我需要它用于特定类的向量,但如果它适用于任何向量
,它会更好
现在我的代码是:
标题:
MyClass std::vector::operator[](std::vector 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]
}
}
Myclass向量::运算符[](向量常量向量,int常量idx)常量{
n=vector.size()
如果((idx>=0)&(idx您的错误与语法有关:
vector::operator[]
应该是
vector<MyClass>::operator[]
欢迎使用Stack Overflow!请使用或@Aganju:来回答您的问题,因为它们没有回答问题,而且是错误的。@Aganju:vector::operator[]
不执行绑定检查。vector::at
被强制执行绑定检查。我被纠正了。我可以发誓这是另一种方式。尽管遗憾的是没有其他内置方法(甚至操作符本身,因为我认为它在边界之外是无用的)做我想做的事情,它在很多情况下都会非常有用!谢谢你的回答!但是我将不得不更改我的所有代码,因为我已经在所有地方使用向量了…我想我将在本地处理索引超出边界的问题,即使它没有那么优雅^^^问题,操作符[]是否不能保证
不会修改任何MyClass
成员?@codekaizer我认为它不应该修改,因为它没有重载MyClass的操作符[]!对不起,我是说MyVector
。我希望它也有一个const
-等价的操作符[]
它将返回一个常量引用
。您不应该同时重载这两个引用吗?@codekaizer:是的,一个真正的实现也会有这个。
vector::operator[]
vector<MyClass>::operator[]
struct MyVector : std::vector<MyClass>
{
MyClass& operator[](std::size_t index)
{
// ...
}
};