可能重复:
C++ 重载:重载 [][] 运算符
我有一个类矩阵,它的数据存储在vector<vector<double> > _data
我想重载[][]
运算符以返回_data[row][cols]
我环顾四周,但不太明白如何vector
使用vector
我知道我需要重载[]
运算符,但它只接收一个参数。
正在考虑创建一个内部助手类,但我无法完全理解这个。
有任何想法吗?
谢谢
可能重复:
C++ 重载:重载 [][] 运算符
我有一个类矩阵,它的数据存储在vector<vector<double> > _data
我想重载[][]
运算符以返回_data[row][cols]
我环顾四周,但不太明白如何vector
使用vector
我知道我需要重载[]
运算符,但它只接收一个参数。
正在考虑创建一个内部助手类,但我无法完全理解这个。
有任何想法吗?
谢谢
你至少有两个选择:
创建一个MatrixRow
存储单行矩阵的自定义类。此类可以重载operator[]()
以返回行中的元素。然后你的矩阵类重载它自己operator[]()
的返回一个MatrixRow
.
在矩阵类中重载operator[]()
以返回vector<double>
. 然后你免费获得第二个operator[]()
。
怎么样:
double& operator()(size_t row, size_t col) {
return _data[row][col];
}
// ...
m(2,4) = 10.3;
它不完全相同,但在语法上几乎一样方便,并且它抽象了底层实现(因此,如果您决定只使用一个向量 (1D) 并计算正确的索引以使其显示为 2D,这将很容易做)。
顺便说一句:使用嵌套向量会产生额外的内存(和查找)开销,这是您可能不想要的。
据我所知,您正在尝试创建二维向量。所以,这里是你可以做到的方式:
vector <vector<double>> _data;
vector <double> vec_d; // temporary helpful vector
double d=NULL;
for(int i=0;i<column_size;i++){
_data.push_back(vec_d);
for(int j=0;row_size<l;j++)
_data[i].push_back(d);
}
完成此操作后,您可以通过以下方式访问您的数据:
_data[1][0] = 1.5;