1

可能重复:
C++ 重载:重载 [][] 运算符

我有一个类矩阵,它的数据存储在vector<vector<double> > _data 我想重载[][]运算符以返回_data[row][cols]

我环顾四周,但不太明白如何vector使用vector

我知道我需要重载[]运算符,但它只接收一个参数。

正在考虑创建一个内部助手类,但我无法完全理解这个。

有任何想法吗?

谢谢

4

3 回答 3

4

你至少有两个选择:

  1. 创建一个MatrixRow存储单行矩阵的自定义类。此类可以重载operator[]()以返回行中的元素。然后你的矩阵类重载它自己operator[]()的返回一个MatrixRow.

  2. 在矩阵类中重载operator[]()以返回vector<double>. 然后你免费获得第二个operator[]()

于 2013-01-08T23:25:38.817 回答
1

怎么样:

double& operator()(size_t row, size_t col) {
    return _data[row][col];
}

// ...
m(2,4) = 10.3;

它不完全相同,但在语法上几乎一样方便,并且它抽象了底层实现(因此,如果您决定只使用一个向量 (1D) 并计算正确的索引以使其显示为 2D,这将很容易做)。

顺便说一句:使用嵌套向量会产生额外的内存(和查找)开销,这是您可能不想要的。

于 2013-01-08T23:30:19.557 回答
-1

据我所知,您正在尝试创建二维向量。所以,这里是你可以做到的方式:

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;
于 2013-01-08T23:26:25.717 回答