私は C++ で疎行列クラスを作成しています。このクラスでは、すべての行と列が、作成したクラス (適切な名前: LinkedList) からの連結リストの配列です。
このマトリックス内の 1 つのセルへの「スマート」ポインターであるクラスを作成したいと考えています。
そのクラスでは、たとえば、マトリックスのリンクされたリストを移動するためLIPointer
の演算子関数を実装します。++
を作成するたびに行列配列とサイズ変更された要素の参照を移動せずにこれを行うエレガントな方法はありますlinkedlistPointer
か?
stl::array
etc. は自分で作らないといけないので使えません。
宣言は次のとおりです。
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 番目の行の最初のセルになることです。