Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-04-2015, 15:34   #1
andreact88
Junior Member
 
Iscritto dal: Aug 2011
Messaggi: 19
[C++] Liste di oggetti C++

Ciao a tutti, sono alle prese con le liste di oggetti in c++, purtroppo non ho ben chiaro il funzionamento. Qualcuno saprebbe spiegarmi come poterle fare?
Grazie
andreact88 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2015, 15:42   #2
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15829
una lista è una sequenza di oggetti che contengono dei dati e l'indirizzo dell'elemento successivo (fatto nello stesso modo)

quindi ci devono essere almeno due campi un puntatore e un contenuto, bisogna sempre salvara da qualche parte l'indirizzo dell'elemento inziale, invece la fine la trovi quando un elemento punta a NULL.

Questa è una descrizione a grandi linee di cos'è una lista.

Il grosso vantaggio della lista è che puoi aggiungere elementi dinamicamente quindi per esempio potresti usarla per salvare una lista di interi, tipo vettore, del quale non conosci a priori la lunghezza.
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2015, 16:11   #3
andreact88
Junior Member
 
Iscritto dal: Aug 2011
Messaggi: 19
Intanto ti ringrazio per la risposta.
Credo che la mia domanda fosse un po' troppo vaga.
Io riesco tranquillamente a creare una lista, accedervi aggiungendo ed eliminando elementi. Il mio problema nasce nel momento in cui la lista debba essere di oggetti. Anziché passare un "data" di tipo int, vorrei passare un oggetto.

Per esempio, vorrei creare una rubrica. Dunque la mia lista dovrà contenere un'insieme di persone. Supponendo di avere già una classe "Persone" con metodi e tutto, come faccio ad inserire un tot di persone ( questo tot non definito, chiaramente, sennò avrei optato per gli array )?

Spero di essere stato chiaro.
P.s. Non posso utilizzare <vector> o <list> in quanto il mio professore vuole che il tutto venga svolto senza questi ultimi.
andreact88 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2015, 09:32   #4
71106
Bannato
 
Iscritto dal: Nov 2014
Messaggi: 292
Quote:
Originariamente inviato da andreact88 Guarda i messaggi
Ciao a tutti, sono alle prese con le liste di oggetti in c++, purtroppo non ho ben chiaro il funzionamento. Qualcuno saprebbe spiegarmi come poterle fare?
Grazie
Usa deque.

Esempio di dichiarazione:

Codice:
struct Object {
	int m_Field1;
	bool m_Field2;
	Object(int const a_Field1, bool const a_Field2) :
		m_Field1(a_Field1),
		m_Field2(a_Field2) {}
};

deque<Object> List;
Initializzazione:

Codice:
deque<Object> List{
	Object(-10, false),
	Object(3, true),
	Object(40, true),
	// ...
};
Inserimento:

Codice:
List.push_front(Object(-3, true)); // in testa
List.push_back(Object(1, false)); // in coda
Iterazione:

Codice:
for (auto it = List.begin(); it != List.end(); ++it) {
	cout << it->m_Field1 << ' ' << it->m_Field2 << endl;
}
Iterazione con Boost Lambda:

Codice:
for_each(List.begin(), List.end(),
	cout << _1->m_Field1 << ' ' << _1->m_Field2 << '\n');
cout << flush;
71106 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2015, 09:43   #5
71106
Bannato
 
Iscritto dal: Nov 2014
Messaggi: 292
Pardon, ho suggerito il container sbagliato.

Credevo che deque fosse una lista doppiamente linkata mentre invece è un accrocchio strampalato basato su una specie di hash table.

Usa list, gli snippet di cui sopra sono più o meno validi per tutti i container STL e quindi restano sostanzialmente invariati.

Esempio di dichiarazione:

Codice:
struct Object {
	int m_Field1;
	bool m_Field2;
	Object(int const a_Field1, bool const a_Field2) :
		m_Field1(a_Field1),
		m_Field2(a_Field2) {}
};

list<Object> List;
Initializzazione:

Codice:
list<Object> List{
	Object(-10, false),
	Object(3, true),
	Object(40, true),
	// ...
};
Inserimento:

Codice:
List.push_front(Object(-3, true)); // in testa
List.push_back(Object(1, false)); // in coda
Iterazione:

Codice:
for (auto it = List.begin(); it != List.end(); ++it) {
	cout << it->m_Field1 << ' ' << it->m_Field2 << endl;
}
Iterazione con Boost Lambda:

Codice:
for_each(List.begin(), List.end(),
	cout << _1->m_Field1 << ' ' << _1->m_Field2 << '\n');
cout << flush;
71106 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2015, 09:46   #6
71106
Bannato
 
Iscritto dal: Nov 2014
Messaggi: 292
Quote:
Originariamente inviato da andreact88 Guarda i messaggi
P.s. Non posso utilizzare <vector> o <list> in quanto il mio professore vuole che il tutto venga svolto senza questi ultimi.
Ah, ecco.

Il tuo professore è un idiota, se svolgessi il compito correttamente finiresti per riscrivere un container STL, cosa che non penso tu sia in grado di fare. Non perchè tu sia stupido, ma perchè dubito che il tuo professore sia entrato così a fondo in certi argomenti relativi al linguaggio C++. Esempio: vi ha mai parlato di R-value references e move semantics?
71106 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2015, 09:50   #7
71106
Bannato
 
Iscritto dal: Nov 2014
Messaggi: 292
Quote:
Originariamente inviato da Simonex84 Guarda i messaggi
[...] invece la fine la trovi quando un elemento punta a NULL.
Per cortesia, siamo nel 2015.

La fine la trovi quando un elemento punta a nullptr, non a NULL.
71106 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2015, 09:51   #8
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15829
Quote:
Originariamente inviato da 71106 Guarda i messaggi
Per cortesia, siamo nel 2015.

La fine la trovi quando un elemento punta a nullptr, non a NULL.
evabbhe cambia poco, poi il C lo uso poco, lavoro da 7 anni con ADA
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2015, 09:55   #9
71106
Bannato
 
Iscritto dal: Nov 2014
Messaggi: 292
Quote:
Originariamente inviato da Simonex84 Guarda i messaggi
evabbhe cambia poco,
usare NULL è come usare gcc: nefasta inerzia tecnologia, nonchè cattiva programmazione. Se fosse "cambiato poco" non avrebbero introdotto nullptr.


Quote:
poi il C lo uso poco, lavoro da 7 anni con ADA
Ignorantia legis non excusat.

E comunque nullptr non è presente in C, solo in C++.
71106 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2015, 10:01   #10
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15829
Quote:
Originariamente inviato da 71106 Guarda i messaggi
usare NULL è come usare gcc: nefasta inerzia tecnologia, nonchè cattiva programmazione. Se fosse "cambiato poco" non avrebbero introdotto nullptr.


Ignorantia legis non excusat.

E comunque nullptr non è presente in C, solo in C++.
ecco appunto, C++ non lo uso da informatica 1 e 2 seguiti nel 2003/2004, al lavoro quelle rare volte che non tratto codice ADA uso il C (senza i + )

Non è ignoranza ma scarsa memoria su cose che non uso mai
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2015, 10:10   #11
71106
Bannato
 
Iscritto dal: Nov 2014
Messaggi: 292
Quote:
Originariamente inviato da Simonex84 Guarda i messaggi
Non è ignoranza ma scarsa memoria su cose che non uso mai
Tieni presente che nullptr non c'era nel 2003/2004...
71106 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2015, 10:12   #12
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15829
Quote:
Originariamente inviato da 71106 Guarda i messaggi
Tieni presente che nullptr non c'era nel 2003/2004...
sarà mica il caso che mi faccia un bel ripasso di C++
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2015, 14:37   #13
andreact88
Junior Member
 
Iscritto dal: Aug 2011
Messaggi: 19
Vi ringrazio ragazzi per le risposte, il professore alla fine si è convinto a far utilizzare list e vector
Adesso ho un solo quesito, durante l'utilizzo della funzione push_front, io volevo passare anzichè dei parametri, una funzione per l'inserimento dei valori, è possibile farlo?

Es.
Anzichè:
Codice:
lista.push_front(classe(valore));
Volevo utilizzare qualcosa del genere:
Codice:
lista.push_front(classe e funzione add valori)

Ultima modifica di andreact88 : 20-04-2015 alle 14:42.
andreact88 è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2015, 16:56   #14
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da andreact88 Guarda i messaggi
Vi ringrazio ragazzi per le risposte, il professore alla fine si è convinto a far utilizzare list e vector
Adesso ho un solo quesito, durante l'utilizzo della funzione push_front, io volevo passare anzichè dei parametri, una funzione per l'inserimento dei valori, è possibile farlo?

Es.
Anzichè:
Codice:
lista.push_front(classe(valore));
Volevo utilizzare qualcosa del genere:
Codice:
lista.push_front(classe e funzione add valori)
Non ho ben capito cosa intendi per "funzione per l'inserimento dei valori".
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v