View Full Version : [C++] Dubbio sui Vector
Ciao ragazzi,
sto adoperando i Vector per un mio programma. Mi è venuto però un dubbio. Dovendo passare il Vector ad una funzione, è meglio usare :
void funzione(vector<double>&);
vector<double> a;
funzione(&a) ;
Oppure :
void funzione(vector<double>*);
vector<double> a;
funzione(&a) ;
Oppure :
void funzione(vector<double>*);
vector<double>*a;
funzione(a) ;
Altro mio dubbio riguarda il fatto di usare un puntatore a Vector, o direttamente un Vector. Voglio dire, nel caso di semplici array, se scrivo
int a[10]
uso direttamente l'array che ha lunghezza fissa. Se uso int*a, posso dichiararlo dinamico. Ma anche nei Vector vale questa condizione?
Se scrivo
vector<double> a
Può' comunque essere dinamico. Quindi non capisco quando va usato un puntatore a Vector e quando no.
Grazie.
tomminno
05-12-2007, 17:46
Ciao ragazzi,
sto adoperando i Vector per un mio programma. Mi è venuto però un dubbio. Dovendo passare il Vector ad una funzione, è meglio usare :
void funzione(vector<double>&);
vector<double> a;
funzione(&a) ;
qui hai sbagliato a scirvere per passare un riferimento basta
funzione(a);
void funzione(vector<double>*);
vector<double>*a;
funzione(a) ;
Questa è sbagliata in quanto non allochi il puntatore e passi a funzione un puntatore non inizializzato. Per come è dichiarata funzione non può nemmeno allocare il puntatore visto che servirebbe un vector<double>**
Altro mio dubbio riguarda il fatto di usare un puntatore a Vector, o direttamente un Vector. Voglio dire, nel caso di semplici array, se scrivo
int a[10]
uso direttamente l'array che ha lunghezza fissa. Se uso int*a, posso dichiararlo dinamico. Ma anche nei Vector vale questa condizione?
Se scrivo
vector<double> a
Può' comunque essere dinamico. Quindi non capisco quando va usato un puntatore a Vector e quando no.
Grazie.
La cosa migliore da fare è usare i riferimenti per il passaggio di contenitori stl e non allocarli dinamicamente.
Sinceramente mi sfugge un motivo valido per istanziare un puntatore a vector
Questa è sbagliata in quanto non allochi il puntatore e passi a funzione un puntatore non inizializzato. Per come è dichiarata funzione non può nemmeno allocare il puntatore visto che servirebbe un vector<double>**
Si certo,ovviamente prima lo alloco, era solo un codice di esempio. Quelle righe non vanno intese come se fossero una dietro l'altra.
La cosa migliore da fare è usare i riferimenti per il passaggio di contenitori stl e non allocarli dinamicamente.
Non ho capito cosa intendi. La potenza dei Vector si vede proprio quando si usa l'allocazione dinamica.
tomminno
07-12-2007, 20:03
Non ho capito cosa intendi. La potenza dei Vector si vede proprio quando si usa l'allocazione dinamica.
:confused:
cosa intendi dire con ciò?
Quello che ho detto :)
Cosa c'è che non ti torna? Un Vector può avere una lunghezza fissa, anzichè dinamica. Ma non è certo in questo caso che hai vantaggi.E' lo stesso discorso dei vantaggi che hai con un semplice array con dimensioni fisse ed uno dinamico.
Cosa c'è che non ti torna? Un Vector può avere una lunghezza fissa, anzichè dinamica. Ma non è certo in questo caso che hai vantaggi.E' lo stesso discorso dei vantaggi che hai con un semplice array con dimensioni fisse ed uno dinamico.
Un conto è "allocare un vector dinamicamente", un altro conto è "allocare gli elementi del vector dinamicamente".
tommino per allocazione dinamica intendeva la prima, cioè:
vector<double> *a = new vector<double>();
Anche un vector allocato staticamente così è dinamico nel contenuto:
vector<double> a;
Concordo sul passaggio per riferimento del vector allocato staticamente.
Un conto è "allocare un vector dinamicamente", un altro conto è "allocare gli elementi del vector dinamicamente".
E quale sarebbe la differenza?
MM, sempre sui Vector, è giusto definirlo nell'header e poi allocarlo in una funzione? Una cosa così :
Header :
vector<double> a;
Nel .cpp :
void funzione(vector<double>& vector_temp, int elem) {
vector_temp.reserve(elem);
}
e poi:
funzione(a);
E' giusto, ma reserve influisce solo sull'allocazione interna, per dare un dimensione (cioè inserire n elementi nel vector) si usa resize.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.