C++ C++;二维下标算子

C++ C++;二维下标算子,c++,operator-overloading,C++,Operator Overloading,我知道对于一个简单的2d矩阵,如: class Matrix{ vector<vector<int>> data; }; 我的问题是,如果需要对列执行一些转换,如何实现下标运算符。 比如说第i行,那一行的大小是10 当j小于5时,我想返回实际数据,但当j大于5时,其他值表示I+j 有没有办法做到这一点?谢谢 您可以返回代理,类似于: class Proxy { public: Proxy(std::vector<std::vector<int&g

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

class Matrix{
  vector<vector<int>> data;
};
我的问题是,如果需要对列执行一些转换,如何实现下标运算符。 比如说第i行,那一行的大小是10

当j小于5时,我想返回实际数据,但当j大于5时,其他值表示I+j


有没有办法做到这一点?谢谢

您可以返回代理,类似于:

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;
};
类代理{
公众:
代理(std::vector*data,std::size_t i):数据(data),i(i){
int&运算符[](标准::大小_tj){
如果(j<5){return(*data)[i][j];}
else{返回i+j;}
}
私人:
std::矢量*数据;
标准:尺寸(t i);
};
类矩阵{
公众:
代理运算符[](std::size_t i){return{&data,i};}
私人:
std::矢量数据;
};

您可以返回代理,例如:

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;
};
类代理{
公众:
代理(std::vector*data,std::size_t i):数据(data),i(i){
int&运算符[](标准::大小_tj){
如果(j<5){return(*data)[i][j];}
else{返回i+j;}
}
私人:
std::矢量*数据;
标准:尺寸(t i);
};
类矩阵{
公众:
代理运算符[](std::size_t i){return{&data,i};}
私人:
std::矢量数据;
};

您可以返回一个代理。@Jarod42可以详细说明吗?您可以返回一个代理。@Jarod42可以详细说明吗?