覆盖索引操作

时间:2013-06-24 15:41:39

标签: c++

我知道可以在C ++中覆盖索引操作[] 并使用类内部数据,如数组。 是否可以覆盖[] []并像两个维度数组一样工作?

4 个答案:

答案 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],因此您只需要重载[]运算符。