Bonjour � tous,
utilisateur inconditionnel de Java, je me mets � C++ pour des probl�mes de rapidit� dex�cution. Seulement voil�, le m�me code en C++ tourne PLUS LENTEMENT (environ deux fois moins vite) que son petit fr�re en Java. Je sais bien que la JVM a fait beaucoup de progr�s, mais tout de m�me, je me dis que mon code C++ ne doit pas �tre optimal.
Il s'agit d'ajouter dans une bo�te de simulation 1d (un intervalle r�el) des "particules" (des petits segments) de taille 1.0. La m�thode add(double x) ci-dessous tente de faire cela, et renvoie false si la particule que l'on tente d'ajouter recouvre d�j� une particule existante. J'ajoute que la bo�te est p�riodique.
D�tails de programmation : la variable box est la taille de la bo�te, la variable spheres est le nombre de particules d�j� contenues dans cette bo�te. Les particules sont stock�es dans une list<double>, puisque j'ai cru comprendre que l'ajout d'un nouvel �l�ment � n'importe quel endroit de cette liste ne co�te pas cher.
Voil�, voil�, il me reste � joindre le code, en esp�rant que vous trouverez une optimisation �vidente !!! Sinon, j'en resterai � Java...
Merci par avance,
S�bastien
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 bool Rsa1d::add(double x) { if (center.size() == 0) { center.push_back(x); ++spheres; return true; } list<double>::iterator lower; lower = lower_bound(center.begin(), center.end(), x); double x1, x2; if (lower == center.begin()) { x1 = center.back() - box; x2 = center.front(); } else if (lower == center.end()) { x1 = center.back(); x2 = center.front() + box; } else { x2 = *lower; --lower; x1 = *lower; ++lower; } if ((fabs(x1-x) < 1.0)||(fabs(x2-x) < 1.0)) { return false; } center.insert(lower, x); ++spheres; return true; }
Partager