[ Sale_123 @ 03.04.2008. 23:03 ] @
Recimo da imamo nekakvu klasu foo.

Mene interesuje kako mogu kreirati dinamicki niz, ali bez incijalizacije klase.

Dakle, normalno bi islo ovako:

foo* myarray = new foo[arraysize];
....
...
...
delete [] myarray

ali prilikom ovakvog kreiranja, vec inicijalizuje svaka klasa iz dinamickog niza. (valjda bi trebalo biti tako)
Ono sto ja zelim, jeste da kreiram niz, ali tako da polje niza ne pokazuje na odredjenu lokaciju, nego da je prazno.
Onda bi u naradnim linijama koda, svakom polju niza bila dodjeljena vrijednost, tj. klassa.

Evo kako to igleda u mojoj glavi:

foo* myarray = inicijalizacija niza, n duzine
for (int i=0;i<n;i++)
myarray = new foo();

.....

....
...
brisanje niza
[ Goran Arandjelovic @ 03.04.2008. 23:40 ] @
Ništa, onda prosto deklariši niz proizvoljnog broja pokazivača na Foo.

Dakle, ovako nešto:

Code:

foo **niz = new foo*[100];

for(int i=0; i<100; i++)
{
  niz[i] = new foo(...);
}

// A kada zavrsis... onda oslobodi sve...
for(int i=0; i<100; i++)
{
  delete niz[i];
}
delete[] niz;

[ Drolja @ 14.04.2008. 13:03 ] @
Zdravo Sale,

Probaj da koristis STL. Treba da izbegnes situacije u kojima je atribut : tip **** ime_atributa. To se tesko analizira.
Pravilno resenje za dinamicki niz je
Code:
std::vector<tip_elementa>

Za dinamicki niz bez incijalizacije klase
Code:
std::vector<tip_elementa*>
.

evo ti primer :

Code:


#include <vector>
class foo;

void main(void)
{
    std::vector<foo*> niz;

    for(int i=0; i<100; i++)
    {
        //
        // napravis element, dodas u niz :
        //
        foo * element = new foo(parametar1, parametar2);
        niz.push_back(element);
    }

    //
    // ovako izgleda obrada svih elemenata u nizu
    //
    for(unsigned int i=0; i<niz.size(); i++)
    {
        foo * element = niz[i];
        //
        // neka operacija nad elementom
        //
        element->DoSomething();
    }

    //
    // ovako oslobadjas memoriju
    //
    for(unsigned int i=0; i<niz.size(); i++)
    {
        delete niz[i];
    }
    niz.clear();
}



poz
[ Sale_123 @ 14.04.2008. 13:19 ] @
Hvala na odgovoru. Znam za klasu vector i stl, medjutim problem je u tome, sto je to projekat iz Algoritama i struktura podata, i profesor je izricito zabranio koristenje stl-a. Radi se o implementaciji algoritma Extendible hashing, tako da za snimanje indeksa moramo sami da koristimo sopstvene strukture i da sami vrsimo dinamicku alokaciju nizova, umjesto da to prepustimo stl-u. U svakom drugom slucaju, zna se -> STL.


Ali svejedno, hvala svima na odgovorima.