2. C++ Avancé
Itérateurs
Un itérateur est un objet qui peut traverser (itérer sur) un container
sans avoir à connaître l'implantation du container.
Il peut être vu comme un pointeur sur un élément d'un container et utilise des fonctions :
- operator* : retourne l'élément pointé par l'itérateur
- operator++ : permet de passer à l'élément suivant
- operator== et operator!= permet de comparer deux itérateurs et
s'ils pointent sur le même élément
Chaque container possède 4 fonctions à utiliser avec les itérateurs :
- begin() : retourne un pointeur sur le premier élément du container
- end() : retourne un pointeur situé après le dernier élément du container
- cbegin() : comme begin() mais constant (read-only)
- cend() :comme end() mais constant (read-only)
Chaque container possède au moins 2 types d'itérateurs :
- container::iterator : itérateur (read/write)
- container::const_iterator() : itérateur (read-only)
Utilisation
Warning: file_get_contents(ens/inra/c2_stl_iterators.cpp): Failed to open stream: No such file or directory in
/home/jeanmichel.richer/public_html/html_business.php on line
488
Classe générique
Il est préférable de déclarer l'ensemble des méthodes inline dans un fichier header .h :
#ifndef VECTOR_H
#define VECTOR_H
/**
***********************************************
* Vector of elements
***********************************************
*/
template<class T>
class Vector {
// =============================================
// data members
// =============================================
protected:
// maximum number of elements
int max_size;
// dynamic array of elements
T *elements;
// =============================================
// methods
// =============================================
public:
// -----------------------------------------
// default constructor with 10 elements
// -----------------------------------------
Vector(int sz = 10) {
max_size = sz;
elements = new T [ max_size ];
}
// -----------------------------------------
// copy constructor
// -----------------------------------------
Vector(Vector& v) {
max_size = v.max_size;
elements = new T [ max_size ];
for (int i=0; i<max_size; ++i) {
elements[i] = v.elements[i];
}
}
// -----------------------------------------
// assignment operator
// -----------------------------------------
Vector& operator=(Vector& v) {
if (&v != this) {
delete [] elements;
max_size = v.max_size;
elements = new T [ max_size ];
for (int i=0; i<max_size; ++i) {
elements[i] = v.elements[i];
}
}
return *this;
}
// -----------------------------------------
// destructor
// -----------------------------------------
~Vector() {
delete [] elements;
}
// -----------------------------------------
// accessor
// -----------------------------------------
T& operator[](int n) {
return elements[n];
}
// -----------------------------------------
// getter
// -----------------------------------------
int get_size() {
return max_size;
}
};
#endif