Inicializovat ukazatel na třídě s hodnotami NULL

hlasů
2

Jsem Tring intialize pole ukazatelů do uzlu struct, že jsem udělal

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

the private member of my other class is declared as

Node** buckets;

V současné době je inicializován jako lopaty = nový uzel * [SIZE]

Je tam tak jako tak k inicializaci pole tak, aby její členové poukazují na NULL nebo nějakou jinou předdefinovanou ukazatel Node?

EDIT: Im hledá prostředky, aby ji initilize aniž by se snažil vytvářet smyčku for přejít přes plnou délku pole. Velikost pole je určeno v běhu.

EDIT 2: Snažil jsem se std :: fill_n (kbelíky, SIZE_OF_BUCKET, NULL); ale kompilátor dává chyba „nelze převést z‚const int‘a‚uzel *‘“ Jsem pomocí Visual Studio 2008. Je tam něco špatně, že dělám?

Položena 27/08/2009 v 04:44
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
7

Za prvé, je nejjednodušším řešením je provést následující kroky:

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

Jako litb již bylo uvedeno výše, bude tato hodnota inicializovat SIZEukazatele na NULL ukazatele.

Nicméně, pokud chcete dělat něco podobného Node **bucketsa inicializovat všechny ukazatele na určitou hodnotu, pak doporučuji std::fill_nod<algorithm>

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

to bude nastaven každý Node*'a ppo přidělení.

Navíc, pokud chcete, aby uzel mít rozumný člen valuesupon konstrukce, správný způsob, jak je mít konstruktor. Něco takového:

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

    int data;
    Node* next;
};

Tímto způsobem můžete udělat toto:

Node *p = new Node();

a bude správně inicializován s 0 a NULL, nebo

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

Nakonec to udělat:

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

postaví N Nodeobjekty a výchozí postavit jim.

Odpovězeno 27/08/2009 v 04:59
zdroj uživatelem

hlasů
1

Pokud máte na mysli tím polem své pole-of-ukazatelů buckets, pak ano. Stačí nastavit buckets = NULL.

Edit: na základě vaší otázce úprav, stačí použít memset.

memset(buckets, 0, NUM_ELEMENTS_IN_BUCKETS*sizeof(Node*));
Odpovězeno 27/08/2009 v 04:47
zdroj uživatelem

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