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

任何建议或方向将不胜感激。

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

4

2 回答 2

1

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

    std::vector<std::map<size_t, double> > 矩阵;

然后我可以使用以下命令添加一个条目:

    矩阵[行][列] += val;

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

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

于 2008-12-30T10:09:39.617 回答
1

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

例如,要让 LIPointer 的 operator++() 转到下一个右侧元素:

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

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

于 2008-12-30T12:01:08.283 回答