Un pointeur vers Initialiser une classe avec les valeurs NULL

voix
2

Je Tring intialize un tableau de pointeurs vers une struct NODE que je fait

struct Node{
    int data;
    Node* next;
};

the private member of my other class is declared as

Node** buckets;

Il est actuellement initialisés comme des seaux = new * Node [SIZE]

Y at-il de toute façon pour initialiser le tableau afin que ses membres pointent à NULL ou un autre pointeur de nœud prédéfini?

EDIT: Je cherche un moyen de le initilize sans essayer de générer une boucle à parcourir à travers la pleine longueur du tableau. La taille de la matrice est déterminée lors de l'exécution.

EDIT 2: J'ai essayé std :: fill_n (seaux, SIZE_OF_BUCKET, NULL); mais le compilateur donne l'erreur « ne peut pas convertir « const int » à 'Node * » Je suis en utilisant Visual Studio 2008. Y at-il quelque chose de mal que je fais?

Créé 27/08/2009 à 04:44
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
7

tout, la solution la plus simple est d'abord de faire ce qui suit:

Node** buckets = new Node*[SIZE]();

Comme litb indiqué précédemment, cette valorisera initialisation des SIZEpointeurs sur null pointeurs.

Toutefois, si vous voulez faire quelque chose comme Node **bucketset initialiser tous les pointeurs à une valeur particulière, je vous recommande std::fill_nde<algorithm>

Node **buckets = new Node*[SIZE];
std::fill_n(buckets, SIZE, p);

cela définira chaque Node*paprès l' attribution.

De plus, si vous voulez que le nœud d'avoir la construction saine d'esprit membre de valuesupon, la bonne façon est d'avoir un constructeur. Quelque chose comme ça:

struct Node {
    Node() : data(0), next(NULL){}
    Node(int d, Node *n = NULL) : data(d), next(n) {}

    int data;
    Node* next;
};

De cette façon, vous pouvez le faire:

Node *p = new Node();

et il sera correctement initialisé avec 0 et NULL, ou

Node *p = new Node(10, other_node);

Enfin, en faisant ceci:

Node *buckets = new Node[N]();

construira des N Nodeobjets et par défaut les construire.

Créé 27/08/2009 à 04:59
source utilisateur

voix
1

Si vous entendez par tableau votre tableau-de-pointeurs buckets, alors oui. Il suffit de définir buckets = NULL.

Edit: en fonction de votre édition de question, il suffit d'utiliser memset.

memset(buckets, 0, NUM_ELEMENTS_IN_BUCKETS*sizeof(Node*));
Créé 27/08/2009 à 04:47
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more