Newsgroup: it.comp.lang.c++
Titolo: [Programmazione oggetti] inserimento in testa in una lista

Spero di aver postato nel luogo giusto, avrei bisogno di un aiutito.
Come dal titolo mi sto avventurando per la prima volta nella
programmazione ad oggetti con il c++, ho usato per poco tempo e con
nozioni molto elementari il java.
Ecco il mio problema:
   Ho una lista di tipo elementi, ora dovrei inserire in testa a questa
lista un nuovo elemento. ho fatto così:
L'elemento è costituito da:
     un intero
     due stringhe
     un putatore di tipo elemento  //utilizzato per puntare al
successivo
1- mi sono dichiarato un nuovo puntatore  alla lista per esempio aux
2- ho copiato il puntatore al primo elemento della lista (primo) nel
puntatore appena inizializzato (aux)
3- creato il nuovo oggetti elemento, copio l'indirizzo dell'elemento
appena creato nel puntatore primo
4- assegno al puntatore successivo, prensente nell' oggetto next, il
valore di aux
Ora quando vado a fare la stampa della lista mi stampa sempre l'ultimo
elemento inserito!!!
Ho pensato allora di andare a fare l'overloading dell'uguale,ma prima
di avventurarmi in ore di programmazioni vorrei sapere se ho sbagliato
qualcosa o esiste un metodo più veloce per aggiungere in testa.
Poi vi chiedo anche se potete consigliarmi qualche sito da dove
prendere materiale (guide tutorial ecc) possibilmente in italiano.
Grazie in anticipo e buon lavoro

 successivo
Ci provo...ma aspetta altre risposte:
struct Elemento; // dichiarazione
typedef Elemento* P_Elemento; // P_Elemento alias per Elemento*
struct Elemento {
 ....
 P_Elemento next; // puntatore al prossimo elemento
};
class Lista { // lista di elementi "semplicemente" collegati
 private:
  P_Elemento first; // puntatore al primo Elemento della Lista
 
  // se non richiesti meglio inibire l' implementazione di default...
  Lista (const Lista&); // ...dell' costruttore di copia
  Lista& operator= (const Lista&); // ...dell' op. di assegnazione
 
 public:
  Lista (); // costruttore
  ~Lista (); // distruttore
  ...
  void Inserisci (...);
};
void Lista::Inserisci (...) { // metodo di inserimento in testa
 P_Elemento p=new Elemeneto; // creazione dinamica
 
 // assegni i valori
 p->next=first; // inserimento
 first=p;       // in testa
}
Se ti disegni la struttura dati che vuoi realizzare (benchè astratta è
ben definita) ti riesce più facile visualizzarla!
Spero di non aver cannoto nulla :)
Ciao

lista un nuovo elemento. ho fatto cosě:
Ma perché non usi qualcosa tipo list<MioElemento>?
Enrico

gli elementi della lista sono altri oggetti. Sto cercando di creare una
rubrica telefonica

// se non richiesti meglio inibire l' implementazione di default...
  Lista (const Lista&); // ...dell' costruttore di copia
  Lista& operator= (const Lista&); // ...dell' op. di assegnazione
non ho capito cosa intendi con inibire il costruttore di copia

 
Se non espressamente definiti dal programmatore il compilatore
implementa un costruttore di copia ed un operatore di assegnazione di
default che, se possono andar bene in diversi casi (oggetti allocati
staticamente), sono decisamente impropri ad operare con oggetti
allocati in maniera dinamica (come nel mio esempio) in quanto
effettuerebbero copie ed assegnazioni "superficiali" piuttosto che
"profonde"...su questo argomento è bene consultare un buon manuale
Ciao :)