Exercice 157 (143 revisité)
Ancien énoncé
Créer une classe vect permettant de manipuler des « vecteurs dynamiques » d’entiers,
c’est-à-dire des tableaux d’entiers dont la dimension peut être définie au moment de
leur création (une telle classe a déjà été partiellement réalisée dans l’exercice 80).
Cette classe devra disposer des opérateurs suivants :
• [] pour l’accès à une des composantes du vecteur, et cela aussi bien au sein
d’une expression qu’à gauche d’une affectation (mais cette dernière situation
ne devra pas être autorisée sur des « vecteurs constants ») ;
• ==, tel que si v1 et v2 sont deux objets de type vect, v1==v2 prenne la valeur 1 si v1
et v2 sont de même dimension et ont les mêmes composantes et la valeur 0 dans
le cas contraire ;
• <<, tel que flot<
De plus, on s’arrangera pour que l’affectation et la transmission par valeur d’objets
de type vect ne pose aucun problème ; pour ce faire, on acceptera de dupliquer
complètement les objets concernés.
Commentaires
En dehors de la sortie sur un flot, le composant vector répond parfaitement à la
question (avec, ici, les mêmes noms d’opérateurs [] et ==). En ce qui concerne la sortie
sur un flot, on dispose de plusieurs démarches, comme dans l’exercice précédent. On
peut bien sûr la programmer au fur et à mesure des besoins, en écrivant à chaque fois
les quelques instructions de parcours de l’ensemble :
vector v ;
vector::iteratos iv ;
.....
for (iv=v.begin() ; iv!=v.end() ; iv++) cout << *iv << " " ;
On peut aussi en faire une fonction ordinaire, comme dans cet exemple, analogue à
l’exemple d’utilisation de l’exercice du chapitre 16 :
#include
#include
using namespace std ;
391
Ancien énoncé
Créer une classe vect permettant de manipuler des « vecteurs dynamiques » d’entiers,
c’est-à-dire des tableaux d’entiers dont la dimension peut être définie au moment de
leur création (une telle classe a déjà été partiellement réalisée dans l’exercice 80).
Cette classe devra disposer des opérateurs suivants :
• [] pour l’accès à une des composantes du vecteur, et cela aussi bien au sein
d’une expression qu’à gauche d’une affectation (mais cette dernière situation
ne devra pas être autorisée sur des « vecteurs constants ») ;
• ==, tel que si v1 et v2 sont deux objets de type vect, v1==v2 prenne la valeur 1 si v1
et v2 sont de même dimension et ont les mêmes composantes et la valeur 0 dans
le cas contraire ;
• <<, tel que flot<
De plus, on s’arrangera pour que l’affectation et la transmission par valeur d’objets
de type vect ne pose aucun problème ; pour ce faire, on acceptera de dupliquer
complètement les objets concernés.
Commentaires
En dehors de la sortie sur un flot, le composant vector
question (avec, ici, les mêmes noms d’opérateurs [] et ==). En ce qui concerne la sortie
sur un flot, on dispose de plusieurs démarches, comme dans l’exercice précédent. On
peut bien sûr la programmer au fur et à mesure des besoins, en écrivant à chaque fois
les quelques instructions de parcours de l’ensemble :
vector
vector
.....
for (iv=v.begin() ; iv!=v.end() ; iv++) cout << *iv << " " ;
On peut aussi en faire une fonction ordinaire, comme dans cet exemple, analogue à
l’exemple d’utilisation de l’exercice du chapitre 16 :
#include
#include
using namespace std ;
391
