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
| template <typename INDICE, typename TYPE>
void ListeTriee<INDICE,TYPE>::Ajouter(INDICE Indice, boost::shared_ptr<TYPE> Element)
{
boost::shared_ptr<INDICE> IndicePtr(new INDICE);
*IndicePtr = Indice;
Liste<TYPE>::Ajouter(Element,FIN);
Indices->Ajouter(IndicePtr, FIN);
int cpt = Taille-1;
while (cpt >= 0 && cpt < Taille)
{ // si l'indice n° cpt a une valeur supérieure à l'indice n° cpt+1
if (*(Indices->GetIndice(cpt)) > *(Indices->GetIndice(cpt+1)) )
{ // Alors on échange les valeurs des indices et les valeurs des éléments correspondants.
Indices->GetIndice(cpt).swap( Indices->TableauDeReference[cpt+1] );
this->TableauDeReference[cpt].swap( this->TableauDeReference[cpt+1] );
}
else
{ // Si ce n'est pas le cas, c'est que le tri est fini ; on sort de la boucle.
break;
}
// Puis c'est reparti pour un tour.
--cpt;
}
// La taille de notre liste est donc bien égale à Taille+1 maintenant.
++Taille;
} |