J'écris une classe de matrice clairsemée en C++ dans laquelle chaque ligne et chaque colonne sont des tableaux de listes chaînées provenant d'une classe que j'ai créée (appelée à juste titre: LinkedList).Aide de classe Pointer
Je veux écrire une classe qui est un pointeur "intelligent" à une cellule dans cette matrice.
Dans cette classe, disons LIPointer
, je vais implémenter une fonction opérateur ++
pour déplacer dans les listes chaînées de la matrice.
Y at-il une manière élégante de faire ceci sans déplacer les références des matrices de matrice et des éléments de taille chaque fois que je crée un linkedlistPointer
?
Je ne peux pas utiliser stl::array
etc. parce que je dois les construire moi-même.
Voici les déclarations:
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++();//???
...
};
Tout conseil ou la direction seraient appréciés.
Mise à jour: Elle doit s'exécuter sur l'ensemble de la matrice. C'est pourquoi je pense que je dois déplacer (par référence) les tableaux et la taille de la matrice. L'effet prévu est que cela se produise de la dernière cellule de la liste liée de la première ligne à la première cellule de la deuxième rangée.
Je ne suis pas sûr de ce que vous voulez faire. Dans l'opérateur ++(), ne pourriez-vous pas simplement faire CellPointer = CellPointer-> Right; ? Bien sûr, cela ne fonctionnerait que jusqu'à ce qu'il atteigne le bord droit de la matrice. – csl
J'ai essayé de nettoyer la question autant que possible. On ne sait pas si je capte l'intention clairement ou non. –