2010-09-19 6 views
0

J'ai besoin d'écrire un modèle avec des nœuds contenant des données avec 2 structures de données: une carte et un tas minimum, tous les deux ont les mêmes nœuds et tous les 2 nœuds sont connectés. le problème est que j'ai besoin du tas pour connaître les champs de noeud pour le heapify par exemple, et je ne sais pas quelle est la bonne façon de le faire, les amis? domaines publics à Node? écrire le nœud dans le tas? en utilisant des getters et des setters? merci à tous pour votre aide.Comment écrire un template?

+1

Uhm, mec? Identique à [comment implémenter minheap en utilisant le modèle] (http://stackoverflow.com/questions/3745194/how-to-implement-minheap-using-template)? –

+1

Peut-être un camarade de classe .. –

Répondre

1

Eh bien, une liste chaînée peut être posé comme ceci:

namespace my_namespace 
{ 
namespace detail 
{ 
template <class T> 
struct Node 
{ 
    T value; 
    Node* previous; 
    Node* next; 
    //constructors and other things that might help 
}; 
} 

template <class T> 
class LinkedList 
{ 
private: 
    detail::Node<T>* head; 
public: 
    //all it does  
}; 
} 

Il n'y a aucune raison particulière pour cacher la struct Node de l'utilisateur ou la classe LinkedList (le mettre dans un espace de noms de détail devrait être plus que suffisant): LinkedList en a besoin et le nœud lui-même est pratiquement inutile pour l'utilisateur. Tout encapsulation est à la hauteur de LinkedList à réaliser: il ne devrait tout simplement pas donner sa tête (ou tout autre Node*).

+0

Merci. C'était utile. –

+0

Vous ne devez placer que Node de classe dans l'espace de nom de détail. –

+0

@Victor: En effet, corrigé. – UncleBens