我需要使用矩阵,我使用这种声明的,例如用于int数据类型:C++ - 自定义的矩阵结构
std::vector < vector <int>> my2Dvec(rows, vector <int> (cols));
但现在我想将它用于多种数据类型,所以我宣布这个模板:
template <typename T>
struct matrix
{
int col, row;
std::vector <std::vector <T>> data;
matrix(int c, int r) : col(c), row(r), data(col, std::vector <T> (row))
{
;
}
};
所以我可以用它作为为:
matrix <int> m(10, 10);
...
m.data[1][2] = 0;
现在,我该如何使用(如果可能):
m[i][j] = someValue;
?如何实现这样的功能?
因为你是新来这个,你可能想通过简化它的() - 运算符,而不是[] - 运算符有两个参数。也就是说,你只需要使用T&operator()(const uint x,const uint y){return data [x] [y];},T operator()(const uint x,const uint y)const {return data [ x] [y];},这导致访问像m(i,j)= someValue ;.可能比代理方法更具可读性。无论如何,你想保护子向量 - m [i] .resize(3)不应该工作。出于这个原因,你可能想把它作为一个类,所有属性都是私有的而不是结构。 – Aziuth