1

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

4

4 回答 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 回答