Inicializa um ponteiro para uma classe com valores nulos

votos
2

Estou tring para intialize uma matriz de ponteiros para um struct nó que eu fiz

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

the private member of my other class is declared as

Node** buckets;

Atualmente é inicializado como baldes = new Node * [TAMANHO]

Existe uma maneira de inicializar a matriz para que seus membros apontar para NULL ou algum outro ponteiro Nó predefinido?

EDIT: Im à procura de um meio para initilize-lo sem tentar gerar um loop for para atravessar o comprimento total da matriz. O tamanho da matriz é determinado no tempo de execução.

EDIT 2: Eu tentei std :: fill_n (baldes, SIZE_OF_BUCKET, NULL); mas o compilador dá o erro Não é possível converter de 'const int' para 'Nó *' Eu estou usando o Visual Studio 2008. Há algo de errado que eu estou fazendo?

Publicado 27/08/2009 em 04:44
fonte usuário
Em outras línguas...                            


2 respostas

votos
7

Primeiro de tudo, a solução mais simples é fazer o seguinte:

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

Como litb afirmado anteriormente, este será o valor inicializar SIZEponteiros para null ponteiros.

No entanto, se você quiser fazer algo parecido Node **bucketse inicializar todos os ponteiros para um valor particular, então eu recomendo std::fill_na partir de<algorithm>

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

isto irá definir cada Node*'para papós a alocação.

Além disso, se você quiser que o Nó de ter construção membro valuesupon sã, a forma adequada é ter um construtor. Algo assim:

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

    int data;
    Node* next;
};

Dessa forma, você pode fazer isso:

Node *p = new Node();

e vai ser devidamente inicializado com 0 e NULL, ou

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

Finalmente, fazer isso:

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

vai construir N Nodeobjetos e padrão construí-los.

Respondeu 27/08/2009 em 04:59
fonte usuário

votos
1

Se você quer dizer com variedade a sua matriz de ponteiros buckets, então sim. Basta definir buckets = NULL.

Edit: com base na sua pergunta editar, basta usar memset.

memset(buckets, 0, NUM_ELEMENTS_IN_BUCKETS*sizeof(Node*));
Respondeu 27/08/2009 em 04:47
fonte usuário

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