Newsgroup: it.comp.lang.c++
Titolo: [STL] struct come elemento di vector

<code>
#include<vector>
#include<iostream>
#include<string>
struct ind{
		char* nome;
		char* cognome;
	};
	int main()
{
	std::vector <ind> indirizzario;	
//	indirizzario[0].nome = "mionome";
//	indirizzario[0].cognome = "miocognome";
// Le righe sopra (scommentate) danno errore. 
// Come posso assegnargli un valore ?
// Dove sbaglio ?
// Forse devo inizializzare in qualche modo il vector 
// come gli array di basso livello ?
	indirizzario[0].nome.push_back ( "mionome");
	indirizzario[0].cognome.push_back( "miocognome");
// Poi ho provato ad usare la push_back
// Perchè non funziona ?
	std::cout<< indirizzario[0].nome<< indirizzario[0].cognome << endl;
}
</code>
-- 
   	 ___      ___  __       ___       ___ ___  ___
	/__/ /	 /__/ /   //_/ /__  /__/ /__ /__  /__/
       /__/ /__ /  / /__ // / ___/ /  / /__ /__  /
 
 
http://theunixplace.com/~entropia/index.html
 
Obviously welcome removing Anti-spam filters to contact me in email :-)

 indirizzario[0].cognome.push_back( "miocognome");
non serve a questo ma ad aggiungere un elemento in fondo al vettore.
Es.
ind nuova_persona; // crea un nuovo "ind"
indirizzario.push_back(nuova_persona); // lo aggiunge in fondo al vector
Occhio che cosi' la dimensione del vector aumenta di uno.
Se hai bisogno di frequenti push_back / pop_back (ovvero se non
conosci a priori la dimensione del tuo vector, e questa potrebbe
variare spesso), potrebbe essere meglio se considerare anche l'uso di
un altro tipo contenitore al posto del std::vector
tutto chiaro?
--
Gerolamo

 un altro tipo contenitore al posto del std::vector
non necessariamente. In realta` std::vector si comporta abbastanza bene 
in presenza di push_back e pop_back. Il problema vero di std::vector 
sono gli inserimenti in testa e nel mezzo.
Se sono necessari frequenti inserimenti in testa e un accesso casuale 
agli elementi l'ideale e` std::deque. std::list e` invece la soluzione 
preferibile quando si effettuano frequenti inserimenti nel mezzo, oppure 
quando non e` necessario l'accesso casuale agli elementi.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

tutto chiaro?
Chiarissimo, Grazie. 
P.


 per impratichirmi con i contenitori della STL.
una list, se le dimensioni variano molto, se non hai bisogno di un
accesso casuale, e se devi fare inserimenti/eliminazioni in mezzo.
Oppure rimani col vector che, credo, e' studiato in maniera da essere
molto flessibile e adattarsi a gran parte dei problemi
In generale, se gli elementi da inserire sono "grossi" e le variazioni
di dimensione sono frequenti, conviene la list.
Se gli elementi sono piccoli, invece, conviene il vector.
Questo dipende dal fatto che l'implementazione di vector riserva
spazio per un eventuale aumento degli elementi del vettore, e,
solo quando questo spazio non basta piu', rialloca effettivamente
memoria, riservandone ancora per eventuali ri-aumenti futuri.
Ti rimane un altro contenitore interessante, ovvero la deque.
Cito Stroustrup:
"una deque è una coda con due capi, cioè una deque è una sequenza
ottimizzata per rendere le operazioni alle due estremità efficienti come
per una list, mentre l'accesso via indice mantiene un'efficienza
paragonabile a quella di un vector"
ciao
--
Gerolamo

 memoria, riservandone ancora per eventuali ri-aumenti futuri.
la dimensione di memoria (in numero di elementi) allocata la ottieni con:
Vettore.capacity()
Ri-ciao
--
Gerolamo

	std::vector <ind> indirizzario
Premetto che non ho la pretesa di comprendere pienamente 
questo thread (anche solo iniziare ad intuire mi basterebbe)
sto osservando il C++ con le dovute cautele 
avevo un libero dell'Apogeo ma.. stendiamo un pietoso velo.
resta il fatto che quando trovo istruzioni come questa
	<ind> 
mi perdo,  potete spiegarmi in modo "semplice"  cosa vuol dire?
quando vedo :: mi spavento ma sto cominciando a farci l'abitudine
ma <ind> e' proprio buio totale.
grazie enrico

 mi perdo,  potete spiegarmi in modo "semplice"  cosa vuol dire?
Non e` una istruzione, e` il parametro del template std::vector.  Dice "sto 
dichiarando un vettore, ciascuno dei cui elementi e` un ind".
Alex


Il quale 'ind' č un tipo costruito da me per acquisire record di dati...
e non č, per cosě dire, un tipo "nativo".  
-- 
_____
http://theunixplace.com/~entropia/index.html_____
 
  Mutationem motus proportionalem esse vi impressae 
et fieri secundum lineam rectam qua vis illa imprimitur
	I. N.