我知道可以在 C++ 中覆盖索引操作 [] 并像使用数组一样处理类内部数据。是否可以覆盖 [][] 并像使用两个维度数组一样工作?
问问题
163 次
4 回答
2
是的,这是可能的(std::vector 是此类的一个示例)。
您应该在您的类或结构中重载 operator[]。
如果您使用正整数来索引数据,可能的签名将是:
RETURN_TYPE operator[] (size_type n);
UPD:如果您想要以非负整数作为键的二维数据结构,您可以使用向量向量:
std::vector<std::vector<YOUR_TYPE>> vector_name;
于 2013-06-24T15:42:24.723 回答
1
为了实现它,您需要重载operator[]
以返回一些也有的对象operator[]
。例如:
class Proxy {
std::vector<int>::iterator it;
//constructor;
int operator[] (size_t pos) {
return *(it + pos);
}
}
class MyMatrix {
std::vector<std::vector<int>> v;
Proxy operator[] (size_t pos) {
return Proxy(v[pos].begin());
}
}
于 2013-06-24T16:03:50.243 回答
0
是的,确实可以;通常,您将重载 [] 返回对行类型对象的引用,并在该行类型对象上重载 [] 以产生对标量的引用。
您还应该考虑重载指针取消引用,以保持 and 的等价[x]
性*(... + x)
。
于 2013-06-24T15:44:15.187 回答
0
假设您有一个数组,arr
无论何时您想访问arr[x][y]
它,它都具有等价性,(arr[x])[y]
因此首先arr[x]
评估(让我们命名它a
)然后a[y]
评估,因此您必须重载[]
运算符。
于 2013-06-24T15:44:45.003 回答