L'objet vector et l'object pair
Bon nombre de problèmes sont liés aux tableaux, il est donc incontournable de connaître ce type d'objet dans un langage de programmation. En C++, on parlera le plus souvent de l'objet vector, mais il en exsite d'autres, le plus important et usité reste celui qu'on présentera ici.
L'objet pair quand à lui est utilisé plus rarement, mais je trouve qu'avec la problématique actuelle, il aurait été dommage de s'en priver. C'est un ensemble d'éléments de taille 2, pas plus ! En python on pourrait le comparer à un tuple de taille 2.
Pré-requis
Utilisation de cin et cout
L'objet string
Les fonctions
Les boucles for et while
Problématique
Daniel connaît à peu près ses moyennes et voudrai connaître sa moyenne générale,
Mathématiques:15
Français:8
Anglais:12
Histoire-Géographie:7
Sport:19
Musique:9
Tant qu'il y est, il voudrait que ses moyennes ses notes soient rangées dans l'ordre croissant (du plus petit au plus grand).
Donc quelque chose de cet ordre:
Histoire-Géographie:7
Français:8
Musique:9
Anglais:12
Mathématiques:15
Sport:19
Moyenne:11,66666
L'algorithme est simple,
Code:
Somme = 0 Compteur // Nombre de moyennes ajoutées Tant qu'il y a des moyennes à entrer Demander la matière Demander la moyenne Somme = Somme + moyenne Moyenne = Somme / Compteur Afficher Moyenne Afficher ordre croissant les moyennes
L'objet pair
pair est un objet représentant l'ensemble de strictement 2 éléments (pas plus, pas moins).
Les éléments peuvent être de tous types, il est dans notre cas aisé de connaître les deux types des deux éléments représentés par cet objet.
pair -> (type string, type double)
oui le 2ème élément est un type double, car pour notre moyenne, nous aurons besoin d'être précis.
On doit tout d'abord utiliser une librairie pour cet objet,
Code:
#include <utility>
Code:
pair <string, double> matiere;
[CODE]matiere.first = "Mathématiques";
matiere.second = 15;[CODE]
pas très compliqué n'est-ce pas ?
Pour afficher les éléments d'un objet pair, toujours aussi simple,
Code:
cout << matiere.first << ": " << matiere.second << endl;
L'objet vector
C'est un tableau avec un type particulier que vous préciser lors de sa création, il permettra de faire beaucoup de manipulation, comme le tri, somme, mélange aléatoire, ... bref un incontournable !
Avant toute chose, il faut inclure la librairie adéquate,
Code:
#include <vector>
Code:
vector<pair<string, double>> v;
Sinon pour faire un tableau de double rien de plus simple,
Code:
vector<double> v;
Code:
double moyenne[] = {12.5, 5.5, 9}; vector<double> v (moyenne, moyenne+sizeof(moyenne)/sizeof(double));
Ajouter un objet dans un vector
On utilisera sa méthode push_back,
Code:
vector<double> v; v.push_back(5.5); // ajout de la valeur 5.5 dans le tableau v v.push_back(15.0);
En imaginant notre exemple précédent où l'on ajoute deux éléments
Code:
vector<double> v; v.push_back(5.5); v.push_back(15.0); for (int i=0; i!=(int)v.size(); i++) cout << v.at(i) << endl;
La méthode size permet d'avoir le nombre d'éléments de l'objet vector créé.
On pourra plus tard parler des itérateurs, mais c'est encore un peu complexe à comprendre à ce niveau d'avancement.
Tri des données dans un vector
La phase la plus difficile ! Il va falloir me faire confiance et admettre certaines choses,
Nous allons tout d'abord utiliser la méthode sort se trouvant dans la librairie algorithm.
Retenez là bien elle est très utile...
Donc on ajoute dans notre code
Code:
#include <algorithm>
Code:
bool functionSorting(double i, double j){ return i < j; }
Code:
sort(v.begin(), v.end(), functionSorting);
v.end() récupère l'adresse où se trouve le premier élément
Pas besoin d'en savoir plus, on reverra les itérateurs plus tard, familiarisez vous, vous les verrez souvent par la suite.
Voilà, vous avez tout ce qu'il faut pour résoudre cette problématique, attention de ne pas se faire piéger avec l'objet pair...
Remarque: Cet exercice n'est pas si simple, si vous vous en sortez sans aide et avec réussite, alors je pense que vous commencez à comprendre la notion d'objets qu'on verra un peu plus tard, autant dire que c'est très positif pour l'avancée des notions suivantes.