我有类CMATRIX,其中是“双指针”值的数组。
class CMatrix {
public:
int rows, cols;
int **arr;
};
我只需要键入访问矩阵的值:
CMatrix x;
x[0][0] = 23;
我知道如何在使用要做到:
x(0,0) = 23;
但我真的需要做的是另一种方式。 任何人都可以帮我吗? 请?
谢谢你们在我到底做了这样的帮助...
class CMatrix {
public:
int rows, cols;
int **arr;
public:
int const* operator[]( int const y ) const
{
return &arr[0][y];
}
int* operator[]( int const y )
{
return &arr[0][y];
}
....
谢谢你的帮助,我真的很感激!
你不能重载operator [][]
但这里的习惯用法是使用代理类 ,即超载operator []
返回不同的类,它有一个实例operator []
重载。 例如:
class CMatrix {
public:
class CRow {
friend class CMatrix;
public:
int& operator[](int col)
{
return parent.arr[row][col];
}
private:
CRow(CMatrix &parent_, int row_) :
parent(parent_),
row(row_)
{}
CMatrix& parent;
int row;
};
CRow operator[](int row)
{
return CRow(*this, row);
}
private:
int rows, cols;
int **arr;
};
没有operator[][]
在C ++中。 但是,你可以重载operator[]
返回另一个结构,并在超负荷operator[]
也得到你想要的效果。
你可以通过重载做到这一点operator[]
返回一个int*
,然后由第二应用索引[]
而不是int*
您也可以返回表示行,其另一个类operator[]
可以访问该行的各个元素。
从本质上讲,运营商的后续应用上的[]以前的应用程序的结果工作。
如果您在使用标准库的容器创建一个矩阵,这是微不足道的:
class Matrix {
vector<vector<int>> data;
public:
vector<int>& operator[] (size_t i) { return data[i]; }
};
你可以operator[]
并使其返回一个指针到相应的row or column
的矩阵。 因为由[]指针支持的下标,由“双方的访问notation [][]
是可能的即可。