Comment retourner un tableau (SVP) - C++ - Programmation
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
Marsh Posté le 22-11-2004 à 15:01:21
vector<string> f()
{
vector<string> values;
////
return values;
}
et on en parle plus
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 ?
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
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
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.
Marsh Posté le 23-11-2004 à 20:59:00
Soit dit en passant, retourner un tableau, c'est très bof niveau perf.
Marsh Posté le 23-11-2004 à 21:27:43
Taz, t'es sur que ca marche ton truc qui retourne un objet automatique ?
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 ?
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é
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
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)
Marsh Posté le 23-11-2004 à 22:31:26
Code :
|
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 :
|
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
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
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 ?
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.
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é)
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.
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