[C++] 2 questions : <string> et comparaison ; <vecteur> et pointeurs

2 questions : <string> et comparaison ; <vecteur> et pointeurs [C++] - Programmation

Marsh Posté le 05-03-2001 à 05:16:13    

salut,
 
2 questions, en fait...J'ai deja cherche un peu partout sur le web et je n'ai pas trouve de reponse satisfaisante...Je m'en remets a vous :)
 
1) <string>
Y a-t-il une fonction (membre ou non) de string qui me permette de comparer 2 variables "string" independemment des majuscules / minuscules...
J'essaie d'eviter autant que possible l'utilisation de <string.h> et d'utiliser <string>
Si une telle fonction n'existe pas :(, y en a-t-il au moins une qui fasse passer de minuscule a majuscule ?
 
2) <vector>
Une question sur la maniere dont un vecteur garde les variables qu'on lui donne. vector ne garde-t-il que des pointeurs ?
La question peut paraitre anodine mais voila le code en question :
 
dans le int main()
      vector<Territory> territories;
      Initiate_Territories(territories);
 
la fonction Initiate_Territories(vector<Territory> &territories)
      territories.push_back(Territory());
      territories[i].SetName(info);
 
SetName est une fonction membre de Territory qui definie le nom (tiens donc :) )
Le truc c'est que si vector emmagasine juste des pointeurs, je cree alors un pointer sur un Territory qui n'existe juste que dans le cadre de ma fonction...Apres la fin de la fonction mon pointeur pointe sur...rien :) D'ou la merde :)
 
Alors, est-ce vraie ? (oui j'ai la flemme de regarder le fichier :) )
 
Merci bcp :)


---------------
Si t'es pas net, reste a la buvette
Reply

Marsh Posté le 05-03-2001 à 05:16:13   

Reply

Marsh Posté le 05-03-2001 à 11:54:18    

Bon...ca a pas l'air d'inspirer grand monde alors je reviens a la charge :)
 
1) Pour la premiere question, c'est regle...J'ai pas fignole (ca n'a pas d'interet) et j'ai reutilise <string.h> pour eviter d'ecrire ma propre fonction pour <string>.
 
2) Pour la deuxieme question...une reponse m'interesse toujours !  
En attendant, comme j'ai le sentiment d'avoir raison :) j'ai utilise des pointers...Mon vecteur emmagasine donc des pointeurs sur une classe Territory au lieu de simple objet Territory...


---------------
Si t'es pas net, reste a la buvette
Reply

Marsh Posté le 05-03-2001 à 13:45:38    

En général, quand les objets sont gros, on utilise des containers de pointeurs sur les objets.

Reply

Marsh Posté le 05-03-2001 à 17:07:55    

C'est bizarre comment tu traites le problème !
 
Avec les infos que tu donnes, moi je ferais :
 
void Initiate_Territories(vector<Territory> &T){
  Territory* t;
 
  t = new Territory("machin truc" ); // pour lui donner un nom avec un   constructeur adéquat  
// ou alors avec un constructeur par défaut suivit de  
// t->Setname("machin truc" );
  T.push_back(*t);
};
 
Si tu veux stocker des pointeurs, c'est pareil sauf :
 - la déclaration de ton vector (évidemment !)
 - et le T.push_back(t);

 

--Message édité par minusplus--

Reply

Marsh Posté le 05-03-2001 à 19:49:39    

la fonction push_back utilise le constructeur de recopie de l'objet que tu utilises. Si tu n'en n'as pas défini, alors le constructeur de recopie par défaut est utilisé (recopie à plat).
 
Donc si ton objet contients des pointeurs:
- soit tu as défini 1 constructeur par recopie qui alloue la mémoire (avec un destructeur qui la désalloue, of course)
- soit il fait une recopie à plat (il ne garde 'que' le pointeur.

Reply

Marsh Posté le 06-03-2001 à 02:44:20    

minusplus, SoWhat et Verdoux, ...j'ai utilise votre solution. C'est effectivement LE truc a faire! J'ai du pete un plomb sur mon code et ne pas le voir :)
D'ailleurs je me demande comment vous avez pu comprendre ce que j'ai dis...c'est tout sauf clair :)
 
Bref merci !


---------------
Si t'es pas net, reste a la buvette
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed