指针类辅助

时间:2008-12-30 10:02:25

标签: c++ pointers sparse-matrix

我在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++();//???
...
};

任何建议或指示都将不胜感激。

更新:它需要在整个矩阵上运行。这就是为什么我认为我需要移动(通过引用)数组和矩阵的大小。预期的效果是,这将从第一行的链表中的最后一个单元格到第二行的第一个单元格。

2 个答案:

答案 0 :(得分:1)

对于压缩行矩阵,我使用类似:

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

然后我可以使用:

添加一个条目
    matrix[row][col] += val;

对于每一行,我可以按升序迭代列条目并读出值。

编辑:提出问题的人确实指出他们不能使用STL。也许他们可以使用某种地图而不是链表。否则,我建议使用链接列表的向量,并继续在每个列表的末尾添加条目。然后在添加条目时完成每种链表的排序。

答案 1 :(得分:1)

请您详细说明您希望operator ++()做什么?

例如,让LIPointer的operator ++()进入下一个右边元素:

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

但是当它到达终点时它会停止。