Bonjour
soit un boost::numeric::ublas ::vector vTerm (4)
1 2.1 2.2 3 4
où les nombres ci-dessus sont des intervalles de temps par exemple

et une fréquence m = 2




Je voudrais obtenir le vector suivant vTemp:
0.1 0.2 0.5 1 1.1 1.2 1.5 2 2.1 2.2 2.5 3 3.5 4

Comment je l'obtiens?
Voila ce que je voudrais faire
JE prends le premier terme de vTerm càd 1
Comme j'ai une fréquence de 2
le 1 tombera en 0.5 et en 1

Ensuite je prends le second terme (càd 2.1)
j'aurais (tjs avec ma fréquence de 2) : 0.1 0.6 1.1 1.6 2.1

Pour le suivant 2.2 -> 0.2 0.7 1.2 1.7 2.2

Pour le suivant 3 -> 0.5 1 1.5 2 2.5 3
Pour le dernier 4 -> 0.5 1 1.5 2 2.5 3 3.5 4

Ensuite je remets tout ensemble dans un vector
0.5 1 0.1 0.6 1.1 1.6 2.1 0.2 0.7 1.2 1.7 2.2 0.5 1 1.5 2 2.5 3 0.5 1 1.5 2 2.5 3 3.5 4

Je trie, je supprime les doublons et j'obtiens
0.1 0.2 0.5 1 1.1 1.2 1.5 2 2.1 2.2 2.5 3 3.5 4

Bon en théorie c'est bien joli, mais j'ai un peu du mal en pratique

Voila ce que j'ai fait


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
bu::vector<Term> vTemp(vTerm.size());  // JE sais pas quoi donner comme taille => je donne par défaut celle la...???
for (unsigned i = 0; i< vTerm.size(); i++)
{
	for (Term k = vTerm(i) ; k>0; k-= 1.0/m)
	{
		*(vTemp.begin()) = k;
		vTemp.resize(vTemp.size()+1, true);  ///ICI J'ai l'impression que ca foire...
	}
}
 
std::sort (vTemp.begin(), vTemp.end());  // Tri du vector vTemp
bu::vector<Term>::iterator it = std::unique( vTemp.begin(), vTemp.end());  // suppression des doublons dans l'intervalle begin() -> it()
 
bu::vector<Term> vTemp2(vTemp.size());
std::copy(vTemp.begin(), it, vTemp2.begin());
 
for (unsigned compt= 0; (vTemp(compt)< vTemp(compt-1)) && (compt < vTemp2.size()); compt++){}
 
vTemp2.resize(compt, true);
 
vTemp.resize(vTemp2.size(), false);
std::copy(vTemp2.begin(), vTemp2.end(), vTemp.begin());
Forcément ca ne fonctionne pas mais je vois vraiment pas où et j'ai surtout l'impression de me compliquer la vie...
Si qqun voit, j'accepte avec grand plaisir sa contribution.. ;-)