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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class Foo
{
public:
/* un alias de type sur un itérateur constant,
* utilisable de l'extérieur, qui "cache" le fait
* que l'on travaille avec un std::vector
*/
typedef std::vector<int>::const_iterator const_iterator;
/* éventullement, pour autant que cela ait du sens,
* un alias de type sur l'itérateur non constant
*/
typedef std::vector<int>::iterator iterator;
/* on apprécie généralement de mettre RAII en oeuvre,
* Ce constructeur permet de créer directement une instance
* de la classe en fournissant l'ensemble des valeurs correctes
*/
template <typename iter>
Foo(iter b, iter e):items_(b,e){}
/* la fonction qui permet de savoir combien d'éléments
* sont gérés par l'instance de la classe
*/
size_t size() const{return items_.size();}
/* les fonctions renvoyant un itérateur constant sur le premier
* élément et sur ce qui suit le dernier élément
*/
const_iterator begin() const{return items_.begin();}
const_iterator end() const{return items_.end();}
/* les fonctions renvoyant un itérateur sur le premier
* élément et sur ce qui suit le dernier élément, si cela a du sens
*/
/* les fonctions renvoyant un itérateur constant sur le premier
* élément et sur ce qui suit le dernier élément
*/
iterator begin() {return items_.begin();}
iterator end() {return items_.end();}
/* la fonction permettant de rajouter un élément */
void add(int i)
{
/* si on rajoute un membre représentant le nombre
* maximal d'éléments, on peut envisager de tester
* si ce nombre n'est pas déjà atteint, et prendre
* les mesures que cela imposerait ;)
*/
items_.push_back(i):
}
/* on peut prévoir quantité d'autres fonctions, selon l'utilisation
* que l'on prévoit de faire de cette classe ;)
*/
private:
/* je l'ai dit, la classe vector est bien plus adaptée qu'un pointeur ;)
*/
std::vector<int> items_;
}; |
Partager