View Full Version : [c++] vector di vector
mistergks
19-05-2016, 04:20
Ciao a tutti! Qualcuno riesce a spiegarmi in parole povere come funziona fisicamente un vector di vector scritto così?
Vector<vector<string>>
Devo vederlo come una matrice?
wingman87
19-05-2016, 07:47
Puoi immaginarlo come una matrice ma in questo caso le "righe" sono di lunghezza variabile (dipende da quanti dati contengono).
A me non viene semplice vederlo come una matrice, preferisco vederlo come una lista di liste.
mistergks
19-05-2016, 16:10
Ma come faccio a scorrerlo?
Immagino con due for innestati... Il problema è come faccio a riferirmi al vector contenuto nell'altro vector e come mi riferisco al vector principale?
Cioe tipo:
For(vector<string>::iterator it= begin(); it!=end();it++){
For(vector<string>::iterator it= begin(); it!=end();it++)
}
Sicuramente sbaglio qualcosa nel secondo for...
tomminno
19-05-2016, 16:59
vector<vector<string>> list;
for_each(list.begin(), list.end(), [](vector<string>& v)
{
for_each(v.begin(), v.end(), [](string&s) {
});
});
...
for(vector<string>& v : list)
{
for(string& s : v)
{
...
}
}
//Oppure ancora meglio...
for(auto& v : list)
{
for(auto& s : v)
{
...
}
}
mistergks
20-05-2016, 15:52
Non ho capito...
mistergks
20-05-2016, 16:14
Potrebbe essere anche una list di list... Ma come faccio a scandirla??
Tipo
list<list<*string>>
Potrebbe essere anche una list di list... Ma come faccio a scandirla??
Tipo
list<list<string>>
Il discorso è abbastanza semplice in realtà (ho tolto l'asterisco da string che penso sia un errore di battitura).
Gli elementi della lista più "esterna" sono liste, quindi, come ti ha illustrato tomminno, se stai usando C++11 (spero per te di si) puoi fare:
list<list<string>> matrice;
for(list<string>& lista : matrice)
{
// la variabile "lista" è il riferimento all'elemento i-esimo di "matrice", ovvero una lista :D
for(string& s : lista)
{
... // qui s è il riferimento alla j-esima stringa di lista
}
}
Puoi anche usare come tipo auto, e lasciare al compilatore capire il tipo di dato su cui stai effettuando l'iterazione, in quel modo puoi cambiare il tipo di variabile come vector o list senza dover modificare il modo con cui iteri.
tomminno
23-05-2016, 10:40
Non ho capito...
Che cosa non hai capito?
mistergks
25-05-2016, 02:51
Che cosa non hai capito?
La sintassi e di conseguenza la logica...
For each fa parte del c++? E quei ":"?
tomminno
25-05-2016, 08:40
La sintassi e di conseguenza la logica...
For each fa parte del c++? E quei ":"?
si for_each fa parte del C++ (da sempre) e la sintassi del for con i : (range-based for) è stata introdotta con la versione C++11 del linguaggio.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.