Programmation C++/Les templates/Exercices
Exercices
[modifier | modifier le wikicode]Exercice 1
[modifier | modifier le wikicode]Créez une fonction "trier" pour trier un tableau de 10 données avec un tri par sélection. Le tableau devra être de n'importe quel type. Cette fonction utilisera une autre fonction, "échanger", pour échanger les éléments du tableau.
Le tri par sélection scan un tableau et met sa valeur minimale au début. Il répète l'opération jusqu'à obtenir un tableau trié.
template<class T> T * échanger(T tab[10], int a, int b)
{
T c = tab[a];
tab[a] = tab[b];
tab[b] = c;
return tab;
}
template<class T>T * trier(T tab[10])
{
int j, min;
for(int i = 0; i < 9; i++)
{
for(j = i; j < 10; j++)
{
if(j == i)
min = j;
if(tab[j] < tab[min])
min = j;
}
échanger(tab, i, min);
}
return tab;
}
Exercice 2
[modifier | modifier le wikicode]Créez une classe liste simplement chaînée, avec une classe liste. Cette classe a un pointeur sur le premier élément de la liste. Elle a une méthode pour ajouter ou supprimer un élément au début de la liste et une pour afficher la liste en entier. Évitez toute fuite mémoire. Les éléments seront contenu dans une structure element.
Utilisez la structure élément présentée auparavant.
Utilisez l'instruction new
et delete
pour supprimer et créer de nouveaux éléments.
Une liste simplement chaînée est une structure de donnée. Elle est constituée de blocs où chaque bloc pointe sur le bloc suivant. Chaque bloc contient une donnée.
Il est conseillé de réviser les pointeurs.
Voici le fichier source décomposé pour plus de lisibilité:
#include <iostream>
using namespace std;
// Structure élément
template<class T> element
{
T var;
element<T> * suivant;
};
// Classe liste
Template<class T>class liste
{
public:
element<T> * début;
liste()
{
début = NULL;
}
~liste()
{
while(début != NULL)
{
supprimer();
}
}
void ajouter(T var)
{
if(début == NULL)
{
début = new element<T>;
début->suivant = NULL;
}
else
{
element<T> * p = new element<T>;
p->suivant = début;
début = p;
}
début->var = var;
}
void supprimer()
{
if(début == NULL)
return;
element<T> * p = début;
début = début->suivant;
delete p;
}
void afficher()
{
element<T> * p = début;
while(p != NULL)
{
cout << p->var << endl;
p = p->suivant;
}
}
};