PDA

View Full Version : C++ Usare l'operatore subscript in un STL vector multidime


verloc
12-02-2003, 19:12
Come potrei usare qualcosa del genere
nella funzione PrintParete?

Parete[i][j]


Perchè ho necessità di scrivere codice nelle iterazioni a seconda che i e j siano pari o dispari
in diverse combinazioni.
Ho fatto diversi tentativi ma non vanno.

Vi allego l'esempio che itera usando gli "Iteratori"



//--------------------------------------------------
typedef vector<CPannello> vStriscia;
typedef vector<vStriscia> vParete;

//-------------------------------------------------
//funzione di test
//Stampa l'altezza di ogni pannello striscia per striscia
//chiamando il metodo ::GetH per ogni pannello

void PrintParete(vParete &Parete);
void PrintParete(vParete &Parete)
{
vParete::iterator i;
vStriscia::iterator j;

cout.setf(ios_base::left);
for(i=Parete.begin();i<Parete.end();i++)
{
cout.width(10);

cout<<"Striscia ";
for(j=(*i).begin();j<(*i).end();j++)
{

cout.width(10);

cout<< (*j).GetH()<<" ";
}
cout<<endl;
}
}

dm69
12-02-2003, 21:35
L'espressione:

variabile[i][j]

la puoi fare (credo) se variabile e' di un tipo T per il quale e' definito l'operatore [] tale che ritorna un tipo K che a sua volta possiede l'operatore [].
In pratica le due indicizzazioni sono 2 operatori applicati uno sul risultato dell'altro.

Provalo.

Ciao.

/\/\@®¢Ø
13-02-2003, 08:37
Trattandosi di un vector di vector in teoria non dovrebbe dar problemi. Che errore ti da ?


P.S: Usate i tag [ code ] e [/ code ] per i sorgenti vi prego ! :D

cionci
13-02-2003, 18:09
Appunto...
A me una cosa del genre funziona :

typedef vector<int> vInt;

void main()
{
vector<vInt> v;
v.resize(10);
for(vector<vInt>::iterator i=v.begin(); i<v.end(); ++i)
{
(*i).resize(10);
for(vInt::iterator j=(*i).begin(); j<(*i).end(); ++j)
*j = 5;
}

for(i=v.begin(); i<v.end(); ++i)
for(vInt::iterator j=(*i).begin(); j<(*i).end(); ++j)
cout << *j;
}

Inoltre funziona perfettamente anche con le doppie quadre...

verloc
14-02-2003, 06:52
Avete ragione non capisco perchè non riuscivo a compilare la versione con le quadre :(
Ieri ci ho messo 2 minuti a riscriverla...
Mi scuso con tutti per la non indentazione :( ... me so scordato :D

In realtà come dice Cionci la versione con gli iteratori funzionava, sono stato io a non averlo esplicitamente detto...(scusami Cionci :) )

Ecco come funziona la versione con le quadre.


void Print_H_Parete(vParete &Parete)
{

cout.setf(ios_base::left);
for(unsigned int i=0;i<Parete.size();i++)
{
cout.width(10);

cout.width(10);
cout<<"Striscia:H(i) ";
for(unsigned int j=0;j<Parete[i].size();j++)
{

cout.width(10);

cout<< Parete[i][j].GetH()<<" ";
}
cout<<endl;
}
}




quindi basta scrivere [i][j].metodo_della_classe
Grazie a tutti per l'interessamento...sono un po stressato per sta tesi...

cionci
14-02-2003, 08:42
Che riguarda la tesi ?!?!?!

verloc
14-02-2003, 09:11
Un software per la verifica sismica degli edifici in muratura.
Non sono un informatico studio ingegneria civile .
Ciao Cionci e ... ancora grazie :)

Spero mi aiuterete ancora in seguito .

ri
14-02-2003, 22:19
ma usate i functor per ste cose che son tanto carini da vedere :)

verloc
15-02-2003, 17:34
Sei un po generico :

Fammi un esempio.
Ma ti prego,se riguarda l'outputing lasciamo stare.
Perchè questi sono i classici dirty-codes per vedere giusto se funzionano.
Se ti riferisci a qualche fobject che mi gestisce le combinazioni di indici pari e dispari nelle iterazioni sei il benvenuto :)