2008-12-30 36 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; 
} 

它停止当它到达的终点,虽然。