Comment retourner un tableau (SVP)

Comment retourner un tableau (SVP) - C++ - Programmation

Marsh Posté le 22-11-2004 à 14:56:14    

Bonjour, j'ai une méthode getValues, qui doit retourné un tableau de string, ... je voudrais savoir la syntaxe pour retourner le tableau ...
 
Merci :jap:  

Reply

Marsh Posté le 22-11-2004 à 14:56:14   

Reply

Marsh Posté le 22-11-2004 à 14:59:59    

on peut pas retourner/passer un tableau en parametre
tu peux retourner un reference sur le tableau si il existe dans le contexte d'appel

Reply

Marsh Posté le 22-11-2004 à 15:01:21    

vector<string> f()
{
  vector<string> values;
  ////
 
  return values;
}
 
et on en parle plus

Reply

Marsh Posté le 22-11-2004 à 15:07:58    

Bon ok on ne peut pas retourner un tableau, on retourne le pointeur sur ce tableau c'est ça ?
 
Je peux expliquer le contexte axacte ?
 
Bon c'est parti, en fait je fais deux classes, Element et ListeChainée .. La liste chainée contient des éléments.
 
Bon dans liste chainé j'ai une méthode qui enregistre les valeurs d'un element dans un stream (Pour enregistrement dans un fichier, ou pour afficher à l'écran, )
 
Mais voilà element est une classe mère de class comme client, stock, en gros des classes quo pourront se retouver dans une liste chainnée.
 
Et j'ai donc une méthode getValues qui hérite de la méthde getValues de ELement (Virtual) , alors comment faire ?

Reply

Marsh Posté le 22-11-2004 à 15:09:12    

/me fuit

Reply

Marsh Posté le 22-11-2004 à 15:10:15    

Faut pas faire un new pour le vector ???  

Reply

Marsh Posté le 22-11-2004 à 15:10:42    

Taz reste aide moi !

Reply

Marsh Posté le 22-11-2004 à 15:12:31    

vector c'est un conteneur qui se charge de tout pour toi.
http://c.developpez.com/faq/cpp/?page=STL#STL_vector


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 22-11-2004 à 15:21:55    

Bah ouai je sais ce que c un vector, mais je ne sais pas comment le retourner dans un méthode virtuelle  

Reply

Marsh Posté le 22-11-2004 à 15:54:54    

protoinou a écrit :

Bah ouai je sais ce que c un vector, mais je ne sais pas comment le retourner dans un méthode virtuelle


Ben sans vouloir te vexer je crois bien que tu ne sais pas très bien ce qu'est un vector alors.
Un vector ça se renvoie comme un int. C'est plus gros c'est tout. Tu peux le recevoir en paramètre par référence sinon.
La virtualité n'a rien à voir là dedans.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 22-11-2004 à 15:54:54   

Reply

Marsh Posté le 23-11-2004 à 20:59:00    

Soit dit en passant, retourner un tableau, c'est très bof niveau perf.

Reply

Marsh Posté le 23-11-2004 à 21:04:06    

Bon alors que faut il faire dans ce cas là ?

Reply

Marsh Posté le 23-11-2004 à 21:27:43    

Taz, t'es sur que ca marche ton truc qui retourne un objet automatique ?

Reply

Marsh Posté le 23-11-2004 à 21:30:41    

pourquoi ca marcherait pas ?

Reply

Marsh Posté le 23-11-2004 à 21:35:11    

Parce qu'un objet automatique est detruit quand tu sort du bloc. Mais en fait j'imagine que ca recopie quand tu fais le return. C'est ca ?

Reply

Marsh Posté le 23-11-2004 à 21:39:28    

Bah proposer ce que vous fairiez ???
 
Ca m'aidera mooi pauvre mortel perdu dans toute cette complexité

Reply

Marsh Posté le 23-11-2004 à 21:40:54    

matafan a écrit :

Parce qu'un objet automatique est detruit quand tu sort du bloc. Mais en fait j'imagine que ca recopie quand tu fais le return. C'est ca ?


 
oui

Reply

Marsh Posté le 23-11-2004 à 21:41:07    

matafan> il est retourneé par valeur donc copie (appel du constructeur de copie)
 
protoinou> tu peux le passer par reference (et le retourner par reference)

Reply

Marsh Posté le 23-11-2004 à 22:31:26    

Code :
  1. int[] f() {
  2.   int tab[10];
  3.   return tab;
  4. }


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 23-11-2004 à 23:45:40    

Panini a écrit :

Soit dit en passant, retourner un tableau, c'est très bof niveau perf.


Oui. On peut ruser avec swap :

Code :
  1. vector<string> f();
  2. vector<string> v;
  3. f().swap( v );


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-11-2004 à 08:37:07    

ca fait quoi swap ?

Reply

Marsh Posté le 24-11-2004 à 08:45:54    

RTFM

Reply

Marsh Posté le 24-11-2004 à 09:23:52    

O K

Reply

Marsh Posté le 24-11-2004 à 09:30:38    

HelloWorld a écrit :

Oui. On peut ruser avec swap


 
ou un auto_ptr, ils sont la pour ca


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 24-11-2004 à 09:51:36    

au nom surtout pas les auto_ptr ! avec le transfert de propriété inhérent à chaque affectation/copie, c'est le meilleur moyen de se perdre !
 
le mieux, c'est encore d'avoir un bon compilateur capable d'optimiser ce genre de cas au mieux, après c'est sur que si c'est vraiment gros, un passage par référence genre
 
void fill(vector<string> &values);
 
peut être plus judicieux

Reply

Marsh Posté le 24-11-2004 à 09:55:52    

bin les auto_ptr n'ont pas été désigné justement pour des cas comme ca ? sinon pourquoi ont-ils été fait ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 24-11-2004 à 09:58:13    

BlackGoddess a écrit :

bin les auto_ptr n'ont pas été désigné justement pour des cas comme ca ? sinon pourquoi ont-ils été fait ?


Je sais pas pour quoi ils ont été fait, mais moi je ne m'en sert que pour l'exception-safety.

Reply

Marsh Posté le 24-11-2004 à 10:00:28    

l'exception safety => pour que l'objet alloué soit détruit dans le cas d'une exception lancée qui remonte ? (donc l'auto_ptr sortira de la portée, destructeur exécuté)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 24-11-2004 à 10:04:09    

BlackGoddess a écrit :

l'exception safety => pour que l'objet alloué soit détruit dans le cas d'une exception lancée qui remonte ? (donc l'auto_ptr sortira de la portée, destructeur exécuté)


Exactement.  
 
Les auto-ptr ont été entourés de querelles de clocher lors de leur conception, et au final, on a pris un compromis en terme de sémantique, ce qui fait qu'ils sont limite inutiles.  
 
Pour tout ce qui est shared pointers, il faut une fois de plus se tourner vers boost.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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