[c++]Vector di vector

franbisc
una scrittura di questo tipo cosa significa?
vector< vector<int> >
matrix (rows, vector<int> (cols,0))


fin'ora ho fatto solo gli array,e non ho capito da dove spunta fuori questo tipo di scrittura?Cioè vector è una parola riservata,è in qualche libreria,ha funzioni particolari,non è la stessa cosa che creare un vettore con l'array?

per favore siate il più prolissi e dettagliati :lol: possibili...

Risposte
vict85
vector è una classe "generica" presente nelle librerie standard. In pratica nel c++ sostituisce gli array per gli usi più comuni perché è abbastanza ottimizzata, è creato dinamicamente ma tutta la sua gestione è già scritta. Non ti devi preoccupare di alcune questioni. In realtà per usarlo bene devi anche conoscerlo bene e magari sapere come è a grandi linee implementato.
In modo simile la classe string sostituisce gli array di char. Ma forse quelli li hai già visti.

Il significato della riga sopra è che hai una funzione matrice che restituisce una sorta di array di array di int (in realtà qualcosa di molto diverso come modo in cui è memorizzato in memoria ma simile in spirito) e che prende come valori una variabile di tipo rows (che non so come sia definita) e un array di int (di dimensione cols e con tutti 0). Personalmente non so cosa debba fare quella funzione ma la trovo già di base ideata male. E questo perché ritengo che vector> sia un tipo da evitare come la peste (a mio avviso usarlo ti crea più problemi di quanti ne risolva e senza dubbio non è una struttura efficiente).

apatriarca
Il problema dell'essere prolissi e dettagliati in questo caso è che avresti bisogno di praticamente metà del tuo manuale di C++ per comprendere il significato di quella scrittura. Si tratta di una classe template, cioè un tipo che è "parametrizzato" da un altro tipo e per il quale sono definite delle funzioni che agiscono su di esso e delle variabili "interne al tipo" (non mi sembra in questo caso). Una volta che sarai in grado di capire che cos'è una classe e che cos'è una classe template potrai capire esattamente di cosa si tratta. Ma per poter usare tipi di questo tipo non è necessario capire tutte queste cose. Puoi usarlo come una specie di scatola nera in cui hai delle funzioni membro (che richiami inserendo un punto dopo la variabile e seguita dal nome della funzione) e delle variabili membro che funzionano in modo simile (inserendo però il nome della variabile dopo il punto). Se hai un puntatore a qualcosa del genere dovrai invece usare -> al posto del punto. L'ultima cosa che vale la pena di sapere è che il tipo che parametrizza la classe è inserita tra le parentesi quadre.

vector è una classe template che implementa un array di dimensione variabile e in quel caso si definisce una array dinamico i cui elementi sono a sua volta array dinamici. Non ho tempo di descrivere nei dettagli il funzionamento della classe. Ti consiglio di provare a dare un occhiata a questo reference oppure a cercare qualche tutorial con google.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.