PDA

View Full Version : [C++]Consiglio


Luc@s
30-12-2003, 09:43
E meglio

/**
<b>Name</b>:Find\n
<b>Return</b>:A Value of option\n
<b>Argoments</b>: The name of option \n
<b>Description</b>: Findo a option\n
*/
string CParse::Find(string key)
{
string ret;
vector<Info>::iterator It = conf.begin();
for(; It != conf.end();++It)
{
if(It->key == key)
ret = It->value;
}
return ret;
}

o

/**
<b>Name</b>:Find\n
<b>Return</b>:A Value of option\n
<b>Argoments</b>: The name of option \n
<b>Description</b>: Findo a option\n
*/
void CParse::Find(string * key)
{
vector<Info>::iterator It = conf.begin();
for(; It != conf.end();++It)
{
if(It->key == key)
key = It->value;
}
}




Tnk

/\/\@®¢Ø
30-12-2003, 11:15
Secondo me e' meglio restituire il valore della ricerca, visto che logicamente il valore di una opzione e' ben diverso dal valore associato.
In ogni caso una delle due versioni e' sbagliata, in una consideri Info.value una stringa, nell'altro un puntatore a stringhe... quale e' sbagliata.
E se la stringa cercata non c'e' che succede ? ;)
Infine visto che usi contenitori della libreria, non riscrivere quello che c'e' gia', usa il metodo find e sei a posto.
Ad esempio (modulo errori ovviamente:D) :


/**
<b>Name</b>:Find\n
<b>Return</b>:A Value of option\n
<b>Argoments</b>: The name of option \n
<b>Description</b>: Findo a option\n
*/
const string& CParse::Find(string key)
{
vector<Info>::iterator It = conf.find(key);
if ( It == conf.end() )
{
// non c'e'... possiamo gettare un'eccezione
// oppure, se decidiamo di tornare puntatori
// invece di stringhe, possiamo tornare un
// puntatore nullo
}
return It->value;
}

Se le ricerche sono di piu' che le inserzioni inoltre potresti cambiare il vector con una map.