Newsgroup: it.comp.lang.c++
Titolo: liste


I'm not prejudiced, I hate everyone equally.

possibilmente con esempi pratici !!!!
FAQ.
Luc.

 Quello è C con le Classi... per le liste prova a vedere la STL:
Si, e' verissimo, se uno deve fare un programma molto probabilmente usera'
le ex-STL, ma sia per imparare il C++, sia per imparare le strutture dati,
non vedo il motivo per cui uno non possa implementarsi una propria lista !?!
Non credi sia utilie saper fare le cose oltre a saperle utilizzare ?
Alex


Puoi risolvere il tuo dubbio grazie al puntatore this.
Per esempio se vuoi aggiungere il metodo
Insert(...) alla tua classe vlista
puoi fare cosi´:
metti questa riga nella parte pubblica della classe vlista:
void Insert(vlista *p_head);
e poi nel file vlista.cpp metti:
void vlista::Insert(vlista *phead)
{
    this->next = p_head->next;
    p_head->next = this;
// eventuale altro codice
}
In sostanza this ti da´ il puntatore all´istanza della classe di cui il
metodo fa parte.
Maurus
P.S. :
scaricati il libro "Thinking in C++" 2th edition di Bruce Eckel da
www.bruceeckel.com

 Luc.
 
ciao e grazie


 
www.bruceeckel.com
grazie duemila !!!!
ciao


possibilmente con esempi pratici !!!!
Io mi sono trovato bene a leggere "The C++ Programming Language"
(terza edizione) ... ma c'e' chi lo sconsiglia per chi si avvicina
al C++. Io credo che sia un buon testo se si ha gia' una discreta
esperienza di programmazione in generale e si conosce gia' il
linguaggio C. Ci sono un buon numero di esempi e la descrizione
del linguaggio e' molto "concreta" e puntuale.
Non so se esiste la traduzione della terza edizione in italiano
e (se esiste) quanto sia decente la qualita' della traduzione...
io ho letto il testo in inglese.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 al procedurale C, figurati se inizio a fare le cose senza capirle !!!
Allora come lo spieghi che nel tuo programma c'e' quasi un errore
ogni riga (vedi post di Andrea Griffini)?
Secondo te una cosa tipo
  #include <list>
  typedef std::list<ANAG> vlista;
e' piu' difficile da capire rispetto al programma che hai scritto?
	Mauro

     su questa regola).
in tutti gli header (in VC98\Include) NULL è definito così:
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif
quindi usare NULL o 0 è la stessa cosa (con VC++).
è solo una comodità per chi è abituato a NULL, o chi proviene dal C.
ciao
xaero

 
http://www.netservers.com/~agriff
grazie mille .... 
ciao


 	Mauro
ciao


 scrivi uno da solo?
Ma per favore, nasconditi !
Io sostengo il contrario... Se uno incomincia ad utilizzare tutte le classi
(ed algoritmi) della SL, alla fine, per comodita', non provera' mai ad
implementarli da solo.
A mio avviso, e' molto istruttivo fare un classe stack, esercitarsi sugli
alberi etc... Poi, per i programmi professionali si possono utilizzare le
classi standard del C++ visto che sono molto ben implementate. Credo anche
che le cose le si sappiano e possano utilizzare meglio quando le si conosce
bene. Quale modo migliore di conoscere una cosa se non quello di saperla
fare ???
Io quando ho tempo mi diverto a riscrivere le ex-STL, e' un buon esercizio.
Se fossi in grado di fare un compilatore farei anche quello;-) Solo che per
imparare a fare un compilatore prima bisogna utilizzarne uno, mentre per
imparare a fare una classe sulle liste non e' necessario usarne una prima.
C'e' una bella differenza, no ?!? E' per questo che il tuo esempio era
infantile e maleducato.
Alex

è solo una comodità per chi è abituato a NULL, o chi proviene dal C.
Mi riferivo al fatto che ::operator new di Visual C++
restituisce il puntatore nullo nel caso che l'allocazione
fallisca, nonostante lo standard dica che bisogna invece
lanciare una specifica exception.
Se rileggi il mio messaggio penso che sia chiaro che il
commento su quanto (poco) MS ci tenga a essere standard
sia riferito a questa parte.


 sia riferito a questa parte.
hai ragione.
stavo per quotare un'altra riga, poi invece ho riportato
questa nonostante abbia letto il msg 2 volte :)
ciao
xaero

 ho gia' detto che e' il primo prog .... un po' di pazienza !!!
Come primo programma e' meglio partire da cose piu' semplici.
Complicarsi inutilmente la vita non aiuta a imparare piu' in fretta.
Se poi quando sarai piu' esperto vorrai reimplementarti la
libreria standard puoi benissimo farlo, ma non mi sembra un
buon esercizio per cominciare.
	Mauro

 del linguaggio e' molto "concreta" e puntuale.
io avevo un po' di esperienza con Pascal e VB, quasi nulla con il C ma non 
ho avuto particolari problemi con "The C++ Programming Language"; lo 
consiglio a chiunque conosca già un linguaggi di programmazione.
Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

e' piu' difficile da capire rispetto al programma che hai scritto?
Io credo che sia perfettamente proponibile per un buon
programmatore C arrivare a comprendere il C++ "dall'interno":
sono anzi convinto che questo approccio porti a una
comprensione piu' solida del linguaggio.
Sono ad esempio anche convinto che avere esperienza di
assembler aiuti a comprendere meglio il linguaggio C e
a scrivere codice migliore in questo linguaggio.
La "magia" in programmazione non esiste... quando viene
fatto qualcosa ci sono sempre pro e contro che dipendono
spesso da dettagli che non sono visibili ragionando ad
"alto livello". Quei "dettagli implementativi" spesso
fanno la differenza fra roba usabile e roba non usabile;
fra programmi decenti e schifezze.
In linguaggi come il C++ che poi hanno ancora un'anima
decisamente low-level (vedi "undefined behaviour") avere
le idee confuse su come certe cose facciano a funzionare
e' secondo me cercarsi delle grane. Anche molte delle
regole apparentemente astruse del C++ diventano chiare
se si pensa all'implementazione (vedi ad esempio pro e
contro del dispatching non virtuale, vedi iterators che
si invalidano).
Trovo curioso che questo approccio "dal basso" sia
sconsigliato da tutti i "grandi" quando in realta' e'
spesso quello che secondo me loro stessi hanno seguito.
Non sto chiaramente dicendo che se qualcuno deve imparare
il C++ da zero gli conviene partire dall'assembler, per
poi passare al C e quindi al C++... pero' se una persona
ha gia' esperienza di C non vedo nulla di male nel
cominciare a capire la parte "core" del C++ (ovvero classi,
metodi, new e delete, template) per poi arrivare a
comprendere std::list e compagni vari che con questi
strumenti di base sono costruiti. In questo modo secondo
me ci si rende conto di quanto sono comodi e belli e di
cosa e' bene farci (e anche di quali sono le scomodita'
e le brutture che hanno e cosa non e' bene farci).
Fra l'altro credo che il sistema di apprendimento piu'
naturale vada dal concreto all'astratto e non viceversa
(in matematica ad esempio prima si impara a contare e
solo dopo si ragiona in termini di spazi funzionali).
Personalmente sono anche poco convinto che sia possibile
mandare a memoria tutte le regole di uso sensato della
libreria standard senza comprenderne (almeno a grandi
linee) l'implementazione.


 ad implementarli da solo.
dipende qual'è l'obiettivo finale. Se uno vuole imparare il C++ non ha 
senso reinventare la ruota.
Se invece uno vuole imparare a gestire le strutture dati, allora è una 
buona cosa implementarsi liste & C. da zero; però dubito che il C++ sia il 
linguaggio più adatto per imparare le strutture dati...
