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;
}