Sujet : [C] : Une fonction peut elle renvoyer un tableau ?? |
BifaceMcLeOD |
Verdoux> Yep, tu as (encore) raison, le "vecteur::" était de trop !
Je sens que je vais arrêter de répondre aux questions C++, moi, ça fait trop longtemps que je n'en ai pas fait.
z51> Rien ne dit que les fonctions que j'ai écrites sont ou non sont pas inline (puisqu'il manque la définition de la classe elle-même). Mais ce qu'elles sont censées optimiser, ces fonctions, c'est la consommation mémoire (le += ne consomme rien). Et puis il n'est pas évident que l'appel de fonction que tu souhaite économiser soit vraiment pénalisant. Comme l'a souligné Verdoux au sujet des matrices, il y a d'autres "optimisations" beaucoup plus efficaces en modifiant carrément l'interface et les algorithmes. |
verdoux |
Ouais c'est pas très optimal.
Mais pour faire des truc assez efficace, il faut pas mal réfléchir.
Un exemple de librairie optimisée:
http://www.oonumerics.org/blitz/
Ca permet d'écrire des trucs du genre:
Array<float,2> A(64,64), B(64,64); // 2 matrices 64x64
Range I(1,62), J(1,62); // on définit 2 indices avec leurs plages.
// et on peut calculer par exemple:
A(I,J) = (B(I,J) + B(I+1,J) + B(I-1,J) + B(I,J+1) + B(I,J-1)) / 5;
Cette dernière écriture est vraiment très proche de ce qu'on écrit mathématiquement. Et l'évaluation est très efficace car on ne fait que 2 boucles (l'une sur I, l'autre sur J) alors que si on prend des opérateurs définis "simplement", le calcul de A+B+C+D+E est évalué en A + (B + (C + (D + E))) soit 4x2 boucles. --Message édité par Verdoux-- |