我知道对于一个简单的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。
有没有办法实现这个目标?谢谢!
答案 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;
};