C ++ 2D下标运算符

时间:2018-04-22 07:54:23

标签: c++ operator-overloading

我知道对于一个简单的2d矩阵,如:

class Matrix{
  vector<vector<int>> data;
};

为了支持Matrix[][]之类的操作,您只需要重载operator[],它会返回相应的行向量,如:

vector<int>& operator[](int row){return data[row]};

我的问题是如果我需要在col上执行一些转换,如何实现下标运算符。 对于第i行说,该行的大小为10。

我想在j小于5时返回实际数据,但是当j大于5时,其他一些值表示i + j。

有没有办法实现这个目标?谢谢!

1 个答案:

答案 0 :(得分:3)

您可能会返回代理,例如:

class Proxy {
public:
    Proxy(std::vector<std::vector<int>>* data, std::size_t i) : data(data), i(i) {}

    int& operator[](std::size_t j) {
         if (j < 5) { return (*data)[i][j]; }
         else { return i + j; }
    }
private:
    std::vector<std::vector<int>>* data;
    std::size_t i;
};

class Matrix{
public:
    Proxy operator[](std::size_t i) { return {&data, i}; }
private:
    std::vector<std::vector<int>> data;
};