簡體   English   中英

重載向量的多維數組運算符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM