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