我知道可以在C ++中覆盖索引操作[] 并使用类内部数据,如数组。 是否可以覆盖[] []并像两个维度数组一样工作?
答案 0 :(得分:2)
是的,这是可能的(并且std :: vector就是这样一个类的一个例子)。
你应该在你的类或结构中重载operator []。
如果使用正整数索引数据,可能的签名将是:
RETURN_TYPE operator[] (size_type n);
UPD:如果你想要使用非负整数作为键的二维数据结构,你可以使用向量向量:
std::vector<std::vector<YOUR_TYPE>> vector_name;
答案 1 :(得分: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());
}
}
答案 2 :(得分:0)
是的,你可以;通常,你会重载[]返回对行类型对象的引用,并在该行类型对象上重载[]以产生对标量的引用。
您还应该考虑重载指针取消引用,以保持[x]
和*(... + x)
的等效性。
答案 3 :(得分:0)
假设您有一个数组arr
,只要您想要访问arr[x][y]
例如(arr[x])[y]
,那么首先评估arr[x]
(我们的名字) a
)然后评估a[y]
,因此您只需要重载[]
运算符。