2008-12-30 38 views
1

我正在寫C++中的稀疏矩陣類,其中每行和列都是來自我創建的類(適當地命名爲:LinkedList)的鏈接列表的數組。指針類協助

我想寫一個類,這是一個「智能」指針,在這個矩陣中的一個單元格。

在那個類中,比如說LIPointer,我將實現一個++運算符函數來移動矩陣的鏈表。

有沒有一種優雅的方式來做到這一點,而不是每次創建linkedlistPointer時移動矩陣數組和參考大小的元素?

我不能使用stl::array等,因爲我必須自己構建它們。

下面是聲明:


class LinkedItem 
{ 
private: 
    int Column, Row; 
    double Value; 
    LinkedItem* Right; 
    LinkedItem* Down; 
public: 
... 
}; 

class SparseLinkedMatrix 
{ 
private: //members 
    int ColSize; 
    int RowSize; 
    LinkedItem ** Columns; 
    LinkedItem ** Rows; 
public: //functions 
    SparseLinkedMatrix(); 
... 

}; 

class LIPointer; 
private: 
    LinkedItem * CellPointer; 
public: 
    LIPointer(); 
     void operator++();//??? 
... 
}; 

任何意見或方向,將不勝感激。

更新:它需要在整個矩陣上運行。這就是爲什麼我認爲我需要移動(通過引用)陣列和矩陣的大小。預期的效果是,這將從第一行的鏈表中的最後一個單元格到第二行中的第一個單元格。

+0

我不確定你想要做什麼。在operator ++()中,你不能只是做CellPointer = CellPointer-> Right; ?當然,它只會在它到達矩陣的右端邊緣之前工作。 – csl 2008-12-30 10:17:21

回答

1

對於壓縮行矩陣,我使用類似:

 
    std::vector<std::map<size_t, double> > matrix; 

然後我就可以使用添加條目:

 
    matrix[row][col] += val; 

對於每一行,然後我就可以通過按升序列條目迭代訂購併讀出價值。

編輯:提出問題的人確實指出他們不能使用STL。也許他們可以使用某種地圖與鏈接列表。否則,我建議使用鏈接列表的矢量,並不斷添加條目到每個列表的末尾。然後在添加條目完成後,對每個鏈接列表進行一次排序。

1

您能詳細闡述一下您希望operator ++()做什麼嗎?

例如,有LIPointer的操作++()進入下一個正確的元素:

void operator++() 
{ 
    if (CellPointer != NULL) 
     CellPointer = CellPointer->Right; 
} 

它停止當它到達的終點,雖然。