[ Kushwais @ 03.07.2008. 20:46 ] @
Potrebna mi je pomoc :)

Moram da napisem klasu za dinamcki array , koja ce prilikom upisa prvog broja ,is da napravi mesta za 20 broja is ... u slucaju da da korisnik upise vise od 20 broja , sledeci array oder 20 mesta i tako dalje ... znaci nema kopiranja podataka u novi array , jednostavno novi array od 20 u beskraj ... array-s moraju biti povezani preko liste, head pokazuje na prvi array, pa lista, pa drugi array ... , copy constructor i Assignment operator za klasu , i verovatno najtezi deo da mogu da ispisem pozicije array-a kao kod obicnih array-s np . cout<< a[21]; da ispise 21 array element .

Mnogo mi znaci ovaj program.


Hvala unapred
[ Aleksa Stankovic @ 04.07.2008. 12:26 ] @
Svidja mi se ideja, probacu da napisem pa ti javljam. Najlakse bi bilo da se uradi kao povezana lista. jedno mi nije jasno. Da li hoces da posto ce biti izdeljeno da adrese svih lista drzim u jednom nizu, ili da svi budu povezani?(prema semi oni su povezani, pa zato ovaj niz moze biti beskonacan?
[ Kushwais @ 04.07.2008. 12:42 ] @
Prikacio sam jpeg koji pokazuje kako razliciti delovi klasse, znaci arrays od po 20 mesta medjesobno povezani ... lista povezuje i "drzi" zajedno sve elemente ...
ne razumem bas pitaje ?? da u sustini treba da bude povezana lista, niz ...

Hvala ti puno :)
[ Aleksa Stankovic @ 04.07.2008. 12:57 ] @
OK, sve sam super ukapirao. Vec pisem(nisam testirao, ali nadam se da ce da radi). Zamolio bih te samo da mi napises koje sve funkcije hoces da ima taj niz po crticama(moze kratko objasnjenje). U principu ja sam ubacio za sad insert i append, i size funkcije, ali nije problem. Takodje navedi tacno ime funkcije, da ih tako nazovem.
[ Kushwais @ 04.07.2008. 13:07 ] @
pa metoda za ubacivanje novih elementa , copy constructor i Asigement operator = , i da mogu da ispisem poziciju kao kod obicnih array ...

np.

DynArray a ;
... upis elementa ...

cout << a[21] ; da ispise 21 element

mislim da je ovo dovoljno,nista vise , ni size ..

einfuegen za ubacivanje novih elementa

:)

[ Aleksa Stankovic @ 04.07.2008. 15:01 ] @
Ovo nije konacna verzija, ja cu menjati kod u poruci kako budem unapredjivao ovaj kontejner. Nazive promeni kako oces, mada bi mogao da sacekas da dovrsim ovaj kod(bice do veceras). Ovo je cisto da vidis kako radi.

Pa, evo koda:

Code:


class CDLista
{

    private:
    static const int velicinaNiza=20;
    struct node
    {
    int lista[velicinaNiza];
    node *next;
    ~node()
    {
        if (next!=0)
        delete next;
    }
    node()
    {
        next=0;
    }
    node(const node& osnova)
    {
        for (int i=0;i<velicinaNiza;i++)
        {
            lista[i]=osnova.lista[i];
        }
        next=0;
        if (osnova.next!=0)
        {
            next=new node(*osnova.next);
        }
    }
    } ;
    node *prvi;
    mutable int _size;
    public:

    CDLista()
    {
        prvi=new node();
        _size=0;
    }

    CDLista(CDLista& lista)
    {
        *this = lista;
    }
    bool change(unsigned int index, int broj)
    {
        //index ima najmanju vrednost 0, tj niz pocinje sa 0
        //change radi za vec unesene brojeve i prvi neunesen broj
        if (index>_size)
        return false;
        int koraci=index/velicinaNiza;
        int element=index%velicinaNiza;
        node *xnode=prvi;
        for (int i=0; i<koraci; i++)
        {
            if (xnode->next==0)
                xnode->next=new node();

            xnode=xnode->next;
        }
        if (index==_size)
            _size++;
        xnode->lista[element]=broj;
        return true;
    }

    int size()
    {
        return _size;
    }

    int& operator[](int index)
    {
        int koraci=index/velicinaNiza;
        int element=index%velicinaNiza;
        node *xnode=prvi;
        for (int i=0; i<koraci; i++)
            xnode=xnode->next;
        return xnode->lista[element];
    }

    void operator= (CDLista& lista)
    {
        delete prvi;
        _size=lista.size();
        prvi=new node(*lista.prvi);
    }

    void append(int broj)
    {
        change(_size, broj);
    }

    void pop()
    {
        //brise poslednji element
        change(_size-1,0);
        _size--;
    }
};





Takodje ovaj kontejner se moze ponasati neocekivano ako budes pozvao nepostojeci index(recimo da je trenutna velicina 30, a ti hoces da pristupis 50-tom elementu). Takodje bih zamolio nekog od boljih programera sa elitesecurity da ukoliko ima zelje i vremena promeni ovaj kontejner tako da vazi za sve tipove objekata(ovaj kontejner je samo za int), posto ja jos nisam naucio da koristim ono template <typename ...> itd.

Ako bilo ko ima bilo koje primedbe, sugestije, savete, samo napred!

[Ovu poruku je menjao opat dana 04.07.2008. u 17:18 GMT+1]

[Ovu poruku je menjao opat dana 05.07.2008. u 23:38 GMT+1]
[ Kushwais @ 04.07.2008. 15:26 ] @
ok super :)

na pocetku array mora da ima samo 20 mesta , ako slucajno korisnik ubaci 21 broj , pravi se novi element lista , koja pokazuje na drugi array od 20 mesta , drugi pointer je 0 posto nema sledeceg elementa ... znaci samo ako je potrebno , stvara se novi array oder 20 mesta , tek kad korisnik ubaci 41 ili vise program terba da napravi treci array od 20 ..

hvala ti opat
[ Aleksa Stankovic @ 04.07.2008. 16:25 ] @
Citat:
Kushwais:
na pocetku array mora da ima samo 20 mesta , ako slucajno korisnik ubaci 21 broj , pravi se novi element lista , koja pokazuje na drugi array od 20 mesta , drugi pointer je 0 posto nema sledeceg elementa ... znaci samo ako je potrebno , stvara se novi array oder 20 mesta , tek kad korisnik ubaci 41 ili vise program terba da napravi treci array od 20 ..



To je upravo ono sto ovaj niz i radi. Ako imas jos ideja sta treba da ubacim u ovu listu, reci. Inace pogledaj gore kod, prosirio sam ga(dodao funkciju pop() ).
Inace sad cu da dodam i operator = . Prati promene poruke, i videces ako sam promenio poruku znaci da sam unapredio kod...
[ Kushwais @ 04.07.2008. 17:41 ] @
jedina ide bi bila , zar se ne moze izvesti da araay dinamicki "napravi " sa new ??

primetio sam izmene poruka :) hvala
[ Kushwais @ 04.07.2008. 18:50 ] @
isprobao sam program,radi :)
[ Eurora3D Team @ 05.07.2008. 02:20 ] @
Pogledaj i ovu temu http://www.elitesecurity.org/t...alokacija-memorije-Realloc-New vezano za dinamicke nizove
[ Kushwais @ 05.07.2008. 13:07 ] @
Pokusavam da napisem zuweisungoperator ali ne ide ...

CDLista & CDLista::operator=(const CDLista & op) {
....
...
return *this; }
[ Aleksa Stankovic @ 05.07.2008. 16:35 ] @
Pa malo je komplikovanije, ali mislim da cu da ga uradim do veceras. Kada radis operator= moras prvo moras da izbrises niz pa da ga napravis kao novi. operator= moze se ujedno imaplementirati i kao konstruktor.
[ Kushwais @ 05.07.2008. 18:15 ] @
Jeste komplikavanije , nazalost jedino sto uspevam jeste adresu da prekopiram , tako da imam 2 "instanzvariable " koje imaju istu adresu ...
[ deerbeer @ 05.07.2008. 20:00 ] @
Code:

template <typename T>
class Dynamic2dArray
{
public:
    Dynamic2dArray(){};
    Dynamic2dArray(int rows, int cols):m_data(rows, std::vector<T>(cols)){}
    inline std::vector<T> & operator[](int i) { return m_data[i];}
    void resize(int rows, int cols){
        m_data.resize(rows);
        for(int i = 0;i < rows;++i) m_data[i].resize(cols);
     }
     void clear(){
        for(int i = 0;i < (int)m_data.size();i++)
            m_data[i].clear() ; 
            m_data.clear() ; 
     }
        
     int size () { 
          return (int)m_data.size() ; 
    }

private:
    std::vector<std::vector<T> > m_data;  
};



Klasa Dynamic2dArray je template klasa i omogucava da postavite bilo koji tip podatka u datu matricu tj. 2D niz

Code:

struct POINT { 
 long x ;
 long y ; 
};

//matrica 10x10 tacaka u ravni 
int nSizeX = 10 ;
int nSizeY = 10 ; 
Dynamic2dArray<POINT> m_aoPoints (nSizeX,nSizeY); 

//ili ako je int 
Dynamic2dArray<int> 2DIntArray(nSizeX,nSizeY); 



Klasa je u stanju da dinamicki prosiruje 2D niz kad god vam je to u kodu potrebno

Code:

nSizeX += 20; 
nSizeY += 20 ; 
m_aoPoints.resize(nSizeX ,nSizeY) ; 
// sad je niz 30x30 ... 

//dodavanje novih tacaka 
m_aoPoints[10][0].x = 130; 
m_aoPoints[10][0].y = 100; 

m_aoPoints[10][1].x = 140; 
m_aoPoints[10][1].y = 110; 
.
.
.
m_aoPoints[nSizeX-1][nSizeY-1].y = 110;
m_aoPoints[nSizeX-1][nSizeY-1].y = 110;
//itd ...



Metodu clear() pozivajte kada hocete da resetujete tj. ocistite ceo 2D niz ...
[ Aleksa Stankovic @ 05.07.2008. 22:37 ] @
Konacno dodao sam i funkciju za operator =, kao i jos neka unapredjenja. Kod jos nije u potpunosti zavrsen, mislim cu ga jos malo obraditi.
[ Kushwais @ 05.07.2008. 23:38 ] @
hvala opat , zamolio bih te samo da prokomentarises program , zeleo bih da shvatim svaki red .. hvala ti puno
[ Kushwais @ 06.07.2008. 15:56 ] @
hvala deerbeer , ipak vektore i kontejnere ne divanim , jos uvek ne .
[ Aleksa Stankovic @ 07.07.2008. 12:26 ] @
Nadam se da sam lepo iskomentarisao kod. Ako ne razumes neke stvari, zamolio bih te da prvo potrazis po net-u neki tutor o povezanoj listi(linked list). Bice mi drago ako budem cuo neka pitanja ili komentare. Mislim da ce ovaj kod biti konacan, osim ako neko ne pronadje neko gresku ili smatra da treba jos nesto da se ubaci.

Code:


class CDLista
{

    private:
    static const int velicinaNiza=20; // velicina niza, tj. koliko ce elemenata da sadrzi jedan node
    struct node   // node, u njemu se nalaze podaci koje dinamicki niz sadrzi i pokazivac na sledeci node
    {                           // koristi se trik da struktura moze sadrzati pokazivac na objekat iste strukture
    int lista[velicinaNiza];    //taj pokazivac(next) ima vrednost 0 ako next pokazuje na nista, tj ne pokazuje na objekat klase node
    node *next;                 // u tom slucaju to je kraj niza

    ~node()                     // destruktor, jer treba obristi i sledece strukture na koje ukazuje next
    {                           // u suprotnom slucaju, program bi opet raio ali doslo bi do curenja memorije
        if (next!=0)            // ako next nije nula, onda next ukazuje na objekat klase node koga treba obrisati
        delete next;            // ovaj destruktor je rekurzivan pa ce se primenjivati dok ne dodje to kraja povezane liste node-ova
    }
    node()                      // konstruktor bez argumenata
    {
        next=0;                 // osigurano je da ce next biti 0, tj da nece pokazivati na objekat
    }
    node(node& osnova)    //  ovaj konstruktor kopira jedan u drugi node, sto se koristi prilikom kopiranja celog
    {                           // objekta klase u drugi.
        for (int i=0;i<velicinaNiza;i++)    // u svakom nodu se kopiraju clanovi manje liste(od 20 clanova)
        {
            lista[i]=osnova.lista[i];
        }
        if (osnova.next!=0)                 // da li je u pitanju kraj povezane liste
        {
            next=new node(*osnova.next);    // ako nije, poziva se rekurzivna funkcija
        }
        else next=0;                        // kraj povezane liste node-ova;
    }
    } ;
    node *prvi;                             // ovde cemo drzati pokazivac na prvi node, preko kojeg cemo moci da dodjemo
                                            // do ostalih node-ova preko pokazivaca *next
    int _size;                              // velicina niza
    public:

    CDLista()                               // konstruktor
    {                                       //treba inicijalizovati pocetne vrednosti
        prvi=new node();
        _size=0;
    }

    CDLista(CDLista& lista)                 // konstruktor sa parametrom iste klase
    {                                       // ovde treba kopirati podatke iz lista u trenutni objekat klase(u *this)
        _size=lista._size;                  // prvo kopiramo velicinu
        prvi=new node(*lista.prvi);         // pa i prvi node, ali pritom pazimo da kopiramo sadrzaj, a ne adresu
                                            // zbog toga ne treba napisati prvi=lista.prvi, jer bi se promenom nekog clana
                                            // jednog objekta promenio i drugi
    }


    bool change(unsigned int index, int broj)       // funkcija koja menja neki clan lista
    {                                               // ili unosi novi. Treba je koristiti za vec inicijalizovane clanove
                                                    // ili da bi se inicijalizovao prvi neinicijalizovani clan, jer ako
                                                    // bi se inicijalizovao clan recimo rbr. 50, a lista je do tada imala
                                                    // 20 clanova, clanovi od 21 do 50 bi imali neodredjene vrednosti
        if (index>_size)                            // ovde se osiguravamo da se nece desiti malopre pomenuta situacija
        return false;
        int koraci=index/velicinaNiza;              // u kom po redu node-u se nalazi element
        int element=index%velicinaNiza;             // koji po redu element je u listi u node-u(moze biti od 0 do velicinaNiza=20)
        node *xnode=prvi;                           // xnode sluzi za kretanje kroz povezanu listu, preko xnode->next dolazimo do sledeceg
        for (int i=0; i<koraci; i++)                // node-a. Ova petlja pronalazi adresu i-tog noda, u kome se nalazi element koga trazimo
        {
            if (xnode->next==0)                     // ako je kraj node, uzimamo novi. Ovo ce se desiti samo ako je element prvi
                xnode->next=new node();             // neinicijalizovan, i prvi je u listi node-a

            xnode=xnode->next;                      // prenosimo adresu xnode-a dalje, da bi se petlja izvrsila na sledecem node-u
        }
        if (index==_size)                           // ako je index==_size, to je slucaj sa prvim neinicijalizovanim brojem,
            _size++;                                // pa moramo povecati velicinu celog objekta
        xnode->lista[element]=broj;                 // dodela broja
        return true;                                // posto je broj dodeljen, vracamo vrednost true
    }

    int size()                                      // jednostavna funkcija koja vraca trenutnu velicinu niza
    {
        return _size;
    }

    int& operator[](int index)                      // funkcija dosta slicna funkciji change, samo sto ne proveravamo
    {                                               // _size, i ne vrsimo dodelu.
        int koraci=index/velicinaNiza;              // Vazno je da ova funkcija vraca referencu na element objekta,
        int element=index%velicinaNiza;             // da bi mogli da ga promenimo(kao lista[0]=3);
        node *xnode=prvi;
        for (int i=0; i<koraci; i++)
            xnode=xnode->next;
        return xnode->lista[element];               // vraca element(tipa int)
    }

    void operator= (CDLista& lista)                 // kopira elemente lista u elemente niz, pri cemo je vazno
    {                                               // da ne kopiramo pokazivace u pokazivace sa istom adresom
        delete prvi;                                // brisemo prvi node, da ne bi doslo do curenja memorije
                                                    // naravno ovo brise(rekurzivno) i sve ostale node-ove
        _size=lista.size();                         // ista velicina
        prvi=new node(*lista.prvi);                 // opet se rekurzivno preslikava reprezentacija cele liste
                                                    // pri cemu prvi i lista.prvi nemaju iste adrese,
                                                    // a razlicite adrese imaju i pokazivaci koji oni sadrze
                                                    // zbog rekurzivne funkcije node(const node& osnova)
    }

    void append(int broj)                           // funkcija za dodavanje elementa
    {
        change(_size, broj);                        // poziva change za index na poslednjem mestu
    }                                               // nema potrebe da pisemo _size++ jer ce to funkcija change
                                                    // sama uraditi

    void pop()                                      // brise poslednji element
    {                                               // pri tom brise i node ako je u pitanju element na mestu 0 tog node-a.
        if (_size!=0)                               // ako je objekat nema elemente onda nema sta izbrisati
        {
        _size--;                                    // smanjuje se velicina niza
        if (_size%velicinaNiza==0 && _size!=0)      // brisemo poslednji node, ako je element prvi u node-ovoj listi, i naravno
        {                                           // nije prvi u prvom node-u, jer bi to bila greska, jer bi posle isti morali da inicijalizujemo
            int koraci=((_size)/velicinaNiza)-1;    // opet slicno funkciji change, samo razlika je sto su koraci za jedan manji,
        node *xnode=prvi;                           // jer trebamo ne samo da obrisemo poslednji node, vec i da u pretposlednjem
        for (int i=0; i<koraci; i++)                // poslednji node (next) oznacimo kao kraj povezane liste node-ova
        {                                           // takodje treba paziti da je _size vec smanjen, pa prilikom racunanja index poslednjeg
            xnode=xnode->next;                      // elementa je _size, a ne _size-1
        }

        delete xnode->next;                         // sustina funkcije, brisanje poslednjeg node-a, ako su se za
        xnode->next=0;                              // to stekli uslovi
        }
        }
    }
    void empty()                                    // brise sve elemente
    {
        if (_size!=0)                               // ako je objekat nema elemente onda nema sta izbrisati
        {
            delete prvi;                            // brisemo sve podatke objekta pa ih opet inicijalizujemo
            prvi=new node()
            _size=0;
        }
    }
};

[ Kushwais @ 08.07.2008. 19:55 ] @
Hvala opat na objasnjenju :)

da li je dovoljno u destructoru

~ node (){
..... }

dovoljno obrisati samo next ili je mozda potrebno i listu ??
[ Kushwais @ 09.07.2008. 13:56 ] @
i print() funkcija . uspevam ispravno samo prvih 20 elementa da ispisem ?

hvala

print () radi kako treba :)



[Ovu poruku je menjao Kushwais dana 10.07.2008. u 00:06 GMT+1]
[ Kushwais @ 10.07.2008. 22:07 ] @
nazalost pop() i empty(), ne rade kako treba :(
[ Kushwais @ 11.07.2008. 18:44 ] @
Leto i odmori su u toku :) ali ako nekog ima molio bih da mi odgovori ...

promenio sam funkciju empty()

Code:
void empty()                                    
    {
        if (_size!=0)                               
        {   node *xnode=prvi;
            int koraci=_size/velicinaNiza;
            for(int i=0;i<koraci;i++)
            xnode=xnode->next;
            delete xnode->lista;           
            _size=0;
            prvi->next=0;
        }
    }


ne znam da li je ovo u redu ?? hvala


hm, provereno ne valja

[Ovu poruku je menjao Kushwais dana 11.07.2008. u 23:06 GMT+1]
[ Aleksa Stankovic @ 11.07.2008. 22:24 ] @
Citat:
Kushwais: Hvala opat na objasnjenju :)

da li je dovoljno u destructoru

~ node (){
..... }

dovoljno obrisati samo next ili je mozda potrebno i listu ??


destruktor(koji sam zaboravio da ubacim) izgleda ovako :
Code:


~CDLista()
    {
        delete prvi;
    }


brisanjem node-a prvi dalje se rekurzivno brisu i ostali node-ovi.
Sta tacno nije dobro sa funkcijama pop() i empty()? Kod mene dobro rade. Ako mozes navedi kod u kojima ih koristis.
[ Kushwais @ 11.07.2008. 22:58 ] @
pa recimo u funkciji empty();

CDLista a ;
...

a.empty();
cout<<a[0];
cout<<a[1];
...

jedino sto je izrisano je prvi index , dobija vrednsot 0 ali zato ostali indexi su tu, vrednosti koje sam pre ubacio .

milsim da je isti probllem kod pop()
[ Kushwais @ 11.07.2008. 23:32 ] @
void empty()
{
if (_size!=0)
{ if(prvi->next)
delete prvi->next;
delete prvi;
prvi=new node();
_size=0;
}
}

ovako sam ja to ispravio , da li je ok??
[ Aleksa Stankovic @ 12.07.2008. 11:00 ] @
To nije problem. Kada se ceo niz obrise, naravno da ce ostati prvih dvadeset elemenata. Posto je u pitanju tip int, bolje je bilo da se u osnovi node-a stavi lista od int[20], a ne lista pokazivaca na tip int*( kao int *lista[20]). Takodje kada obrises poslednji element ono sto se desava jeste smanjenje podatka _size za jedan. Nekad nema potrebe da se uradi bilo sta drugo, jer kako bi ti recimo mogao da obrises recimo 15 element niza int lista[20]? Jedino sto mozes da uradis jeste da recimo tom petnaestom elementu das neku vrednost kojom ces obeleziti da je izbrisan(recimo -1). Inace nema potrebe za brisanjem element po element(ne znam ni kako bi to uradio ako ne bih imao listu pokazivaca na tip int, sto u ovom slucaju nije potrebno). Ono sto je vazno jeste da se izbrise node ako se lista u tom node-u ne sadrzi vise nijedan element(sto mozemo zakljuciti preko promenljive _size). Tada se poslednji node brise. Tako i funkcija empty() brise sve elemente, ali kada ponovo inicijalizuje node prvi postoji mogucnost(cak je i verovatno) da ce da koristi memoriju koja je prethodno koriscena za node prvi, tako da ima iste elemente. Tvoja funkcija empty je gotovo ista kao i moja, evo objasnjenja:

Code:


void empty()
{
if (_size!=0)                      
{ if(prvi->next)
delete prvi->next;
delete prvi;
prvi=new node();
_size=0;
}
}



Kada obrises node prvi on dalje proverava ovaj tvoj deo koda

Code:


if(prvi->next)
delete prvi->next;



Dalje on to proverava za (prvi->next)->next i tako dalje. tako da obe funkcije rade isto samo tvoja ima jedan korak vise. Inace lepo si ovo napisao jer bi mozda bolje bilo da se ova funkcija napise kao:

Code:


void empty()
{
if (_size!=0)                      
{ if(prvi->next)
delete prvi->next;
_size=0;
}
}



Ostavljamo prvi node, ali menjamo _size pa iako imamo neke vrednosti prethodno koriscene to nije vazno posto prilikom koriscenja dinamickog niza treba paziti pre svega na velicinu. Jedino sto mogu da predlozim jeste da recimo ako hoces cisto zbog sebe da sve elemente koje izbrises stavis vrednost 0, mada za to nema potrebe.

Evo nekih primera gde se vidi da ove funkcije rade

Code:

// ovde se nalazi klasa CDLista

int main()
{
    CDLista lista;
    for (int i=0;i<152;i++)
    lista.append(i);
        printf("%d",lista[151]);  // uspeva da otstampa posto postoji 152 elementa
    lista.empty();              // brise sve elemente i inicijalizuje prvih dvadeset
    printf("%d",lista[152]); // naravno ovde se javlja error i program se zavrsava jer se ne moze pristupiti 152 elementu
    return 0;
}


Slicno proslom programu samo koristi funkciju pop().

Code:

// ovde se nalazi klasa CDLista

int main()
{
    CDLista lista;
    for (int i=0;i<152;i++)
    lista.append(i);
        printf("%d",lista[151]);  // uspeva da otstampa posto postoji 152 elementa
    for (int i=0;i<152;i++)
    lista.pop();              // brise sve elemente i inicijalizuje prvih dvadeset
    printf("%d",lista[152]); // naravno ovde se javlja error i program se zavrsava jer se ne moze pristupiti 152 elementu
    return 0;
}


Ukoliko zelis da ti recimo operator [] vrati neku vrednost ako prekoracis velicinu niza kada pristupas index-u, mozes da promenis funkciju operator[] tako da izgleda ovako:

Code:

int& operator[](int index)                     
    {
    int error=0;                    //broj kojim ces obeleziti da si prekoracio velicinu niza
        if (index>=_size) return error;         // ukoliko je velicina niza prekoracena vraca taj broj                                      
        int koraci=index/velicinaNiza;              
        int element=index%velicinaNiza;            
        node *xnode=prvi;
        for (int i=0; i<koraci; i++)
            xnode=xnode->next;
        return xnode->lista[element];              
    }

Nadam se da je ovo ono sto si zeleo.

[Ovu poruku je menjao Aleksa Stankovic dana 12.07.2008. u 12:28 GMT+1]
[ Kushwais @ 13.07.2008. 12:13 ] @
Hvala za trud Aleksa :) dosta mi je pomoglo !

Nazalost copyconstuktor radi lepo samo za prvih 20 elemenata , ako upisem vise , ispise mi "slucajne brojeve "
[ Kushwais @ 13.07.2008. 19:41 ] @
Code:
DynArray( DynArray& lista)                 
    {                                      
        _size=lista._size;                  
        //prvi=new node(*lista.prvi);
           prvi=lista.prvi;
                                           
                                         
    }



sada radi :)
[ Aleksa Stankovic @ 14.07.2008. 21:24 ] @
Citat:
Kushwais:
Code:
DynArray( DynArray& lista)                 
    {                                      
        _size=lista._size;                  
        //prvi=new node(*lista.prvi);
           prvi=lista.prvi;
                                           
                                         
    }



sada radi :)



Mozes li da opises problem sa konstruktorom koristeci kod, posto i ovo kod mene radi. Inace, ovaj kod koji si ti napisao nije dobar iz razloga sto dodeljujes iste adrese, pa kada menjas podatak jedne liste menjas podatak i druge. Primer:
Code:


#include "DynArray"

int main()
{
    DynArray lista1;
    for (int i=0; i<145 ; i++)
    lista1.append(i);
    DynArray lista2(lista1);
    lista1[56]=2;
    cout << (lista2)[56];
    return 0;
}


Koristeci tvoju definiciju, na ekran ce se ispisati 2, dok je pravilno da bude ispisano 56. Sa mojim primerkom ovog konstruktora ne dolazi do ovog problema.
[ Kushwais @ 16.07.2008. 13:37 ] @
U pravu si Aleksa , to sam i kasnije sam video ... problem je doslo samo prilikom ispisa posto sam u node napravio metodu print , kao i u CDLista ..., a ne u constructory , no to sam ispravio sad je sve u najboljme rede !


Desetka za trud Aleksa ;) hvala puno !!!!
[ Aleksa Stankovic @ 20.07.2008. 18:43 ] @
Hvala i tebi. Ako bude trebalo jos nesto... tu sam :))