5. TP de C++ n°5 prise en main de la STL

5.1.Documentation à votre disposition

Nous vous proposons 2 types de documentation :

5.2 Etude des séquences élémentaires

 Il s'agit ici de se familiariser avec les séquences élémentaires et les algorithmes permettant de les manipuler.

Comme le précise le poly, il existe 3 grands types de séquences élémentaires :

Ce sont les conteneurs de base de la STL et nous les utiliserons aussi souvent que possible en préférence à tout conteneur "maison".

5.2.1 Manipulation de la taille des séquences

Diverses commandes permettent de manipuler la taille des séquences :

Dans le cas du vecteur, deux autres méthodes permettent de manipuler la capacité de ce dernier. Rappelons que la capacité est le nombre d'emplacements réservés. Lorsque la taille atteint la capacité, il y a redimensionnement.

5.2.2 Génération et remplissage de séquences

Il est possible de générer et remplir des séquences par différents moyens. Tout d'abord, chaque séquence élémentaire est dotée d'un constructeur par recopie et d'un constructeur basé sur une paire d'itérateurs placés dans un autre conteneur.

Une autre solution consiste à générer les éléments 1 par 1 puis à les insérer dans la collection, par exemple, à l'aide de la méthode push_back. Ceci nécessite néanmoins d'utiliser un premier constructeur pour construire l'élément, puis un appel au constructeur par recopie pour le loger à sa place dans la collection éventuellement suivi de la desctruction de l'élément construit en premier.

Il existe également 2 algorithmes respectivement nommés fill et generate. Le premier prend un un élément et le recopie autant de fois que nécessaire dans le conteneur. Le second utilise un objet foncteur de génération qui produit des éléments à loger dans le conteneur. Le chapitre consacré aux listes dans le poly de cours illustre la génération de séquences à l'aide de generate. Rappelons néanmoins que ni fill ni generate ne réservent de mémoire : ils écrasent des éléments déjà présents ! dans le cas d'une séquence vide, il faudra penser à allouer de la mémoire avec resize au préalable.

5.2.3 Lecture dans un fichier

La lecture des éléments depuis un fichier utilise les itérateurs de flux istream_iterator. Le poly de cours montre un exemple d'utilisation.

5.2.4 Ecriture dans un fichier

L'écriture des éléments dans un fichier utilise les itérateurs de flux ostream_iterator. Vous trouverez également de nombreux exemples d'utilisation dans le poly de cours.

5.2.5 Transfert d'éléments

5.2.6 Tri d'une séquence

Il existe un algorithme générique de tri basé sur une paire d'itérateurs et nommé find. Ce dernier existe dans deux versions différentes, selon que vous passiez ou non un troisième argument : le prédicat de tri ! Comme il repose sur l'indexation des éléments dans le conteneur, il ne peut être appliqué qu'aux vecteurs et DQ. Toutefois, la liste propose un algorithme de tri sous forme de méthode.

5.3 Choix d'une séquence

A l'aide de vos connaissances, implémenter le problème suivant de la manière la plus judicieuse possible.