Newsgroup: it.comp.lang.c++
Titolo: Liste STL e iteratori

Non so se il soggetto è proprio corretto...
Il mio problema è questo:
ho una list STL di puntatori a classi:
class Elemento
{
public:
  void Funzione(int par);
...
};
list<Elemento*> lista;
Ora vorrei richiamare Funzione(int) per ognuna delle classi contenute
nella lista. Pensavo che si potesse fare con gli iteratori con
qualcosa del genere:
list<Elemento*>::iterator i;
for (i=lista.begin(); i!=lista.end(); ++i)
  i->Funzione(parametro);
ma non funziona...
Qualcuno mi potrebbe aiutare?
GRAZIE.
Daniele

  i->Funzione(parametro);
Hai solo un problema di livelli di indirettezza.  i e` un iterator
su di un contenitore di Elemento*; quindi, *i, cioe` il suo
dereferencing, e` [una reference a] un Elemento*.  Per
chiamare la funzione, devi quindi ulteriormente dereferenziare.
Insomma, basta che il corpo del ciclo sia:
    (*i)->Funzione(parametro);
e tutto funzionera`!
Alex

STepanov il principale e Lee il suo "braccio destro"...!).
GRAZIE per la risposta, perņ volevo chiarire che io continuo a usare
il termine STL solo perchč gli articoli su Computer Programming (in
particolare quelli di G. LoRusso) continuano ad utilizzare questo
termine. 
In fondo non lo trovo sbagliato: STL sta per Standard Template Library
(č stato qualcun altro a scherzarci sopra col nome di Stepanov), e
trovo giusto che le "liste STANDARD C++" stiano dentro ad una libreria
chiamata "STANDARD template library": sono d'accordo a voler integrare
questa libreria col C++, ma non vedo perchč eliminare il vecchio
termine...
Ciao
Daniele.

termine...
Il vecchio termine era uno scherzo sin dall'inizio (STepanov e Lee,
con 2/3 del primo e 1/3 del secondo "che ci guadagna perche` un
terzo del suo cognome c'e` entrato contro solo un quarto del mio"!-).
La Libreria Standard C++ e` PIENA di template, con molti dei quali
ne` Stepanov, ne` Lee, hanno nulla a che vedere.  E infatti si vede
un mucchio di gente in giro parlare di "stringhe STL" (le stringhe
della libreria standard C++ sono template, ma NON sono mai state
parte della "STL" ``storica''), ad esempio.  Gli stream di I/O sono
template, i facet dei locale sono template, in effetti e` difficile
trovare checchessia, nella libreria standard C++, che NON sia
un template, a parte cio` che ha "ereditato" dalla precedente
libreria standard C.
Inoltre, la Libreria Standard C++ ha molte piccole ma importanti
differenze rispetto alla STL -- da iterator_traits<> (che in STL
non c'era, nella libreria Standard C++ si`) alle differenze di
signature di vari algoritmi (in mancanza dei traits, non pochi
degli algoritmi STL dovevano prendere un argomento fittizio
di tipo "const reference a T" al solo scopo di permettere la
risoluzione dei template), dall'innovazione del parametro
allocator (che tutti i contenitori della libreria standard C++,
a differenza di quelli della STL, accettano) alle differenze
di signature di container-adaptors come stack<>...!
Ecco dunque, tanto per cominciare, TRE ottime ragioni per
smettere di usare il termine sbagliato: non ha nessuno stato
ufficiale (era uno scherzo che lo Standard ha naturalmente
"mollato"), causa confusione ("stringhe STL"...) del tutto
inutile (perche` mai un principiante dovrebbe sapere quali
parti della libreria standard vengono storicamente dal lavoro
di Stepanov, e quali da quelle di altri?), descrive una libreria
DIVERSA da quella sancita dallo standard e oggi in uso!
Contro tutto questo c'e` l'inerzia di autori come quello che
citi (e tanti altri) e l'inspiegabile fascino psicologico delle
Sigle di Tre Lettere (STL, appunto).  Ma nessuna di queste
ragioni mi impedira` di continuare a correggere l'errore
ogni volta che lo vedo commettere...!
Alex