[英]overload multidimensional array operator for vector
嗨,我正在嘗試創建矩陣 class 並且我想像矩陣 [0] [2] = 3 一樣分配我檢查了表格並找到了一個帶有數組的解決方案,但我想使用向量並且不明白為什么它不起作用?
template<class T>
class Matrix
{
public:
Matrix(int a, int b)
{
vector<vector<T> > vec( a , vector<T> (b, 0));
matrixData = vec;
}
class Array1D
{
public:
Array1D(vector<T> a):temp(a) {}
T& operator[](int a)
{
return temp[a];
}
vector<T> temp;
};
vector<vector<T> > matrixData;
Array1D operator[] (int a)
{
return Array1D(matrixData[a]);
}
};
int main()
{
Matrix<int> n(3,5);
n[0][2] = 123; //assign
cout<<n[0][2]; // wrong output getting 0
}
您必須將Array1D
實現更改為:
class Array1D
{
public:
Array1D(vector<T>& a):temp(a) {}
T& operator[](int a)
{
return temp[a];
}
vector<T>& temp;
};
沒有這個,每次你在矩陣上調用operator[]
時,你都會訪問臨時向量。 因此,每次調用n[0]
都適用於不同的向量。 因此,無法保存之前的任何修改,並且您始終會看到0
作為結果。
通過上述更改,您可以通過Array1D
代理 class 訪問矩陣的原始向量。
您從Matrix::operator[]
返回錯誤的類型。 您需要通過引用返回一個嵌套向量,以便您可以將下一個[]
鏈接到它:
vector<T>& operator[] (int a)
{
return matrixData[a];
}
實際上,您根本不需要內部的Array1D
class ,因為vector
已經有一個operator[]
,您可以完全刪除它。
這是一個工作演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.