User Tools

Site Tools


cpp:stl:iterator

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cpp:stl:iterator [2021/04/07 09:58]
bmonsuez [L'itérateur : un moyen d'énumérer des valeurs dans une structure de données]
cpp:stl:iterator [2022/11/18 10:48] (current)
Line 79: Line 79:
 L'​intérêt des itérateurs est de permettre d'​énumérer des éléments stockées dans une structure de données sans avoir à connaitre ni la structure de données, ni l'​implantation. C'est à la structure de données de fournir un objet ''​iterator''​ qui permettre d'​accéder aux données selon l'​interface. L'​intérêt des itérateurs est de permettre d'​énumérer des éléments stockées dans une structure de données sans avoir à connaitre ni la structure de données, ni l'​implantation. C'est à la structure de données de fournir un objet ''​iterator''​ qui permettre d'​accéder aux données selon l'​interface.
  
 +De fait, il devient possible d'​écrire des algorithmes qui sont indépendant des structures de données. C'est d'​ailleurs le cas de la plupart des fonctions qui sont fournies par la STL dans le module [[https://​en.cppreference.com/​w/​cpp/​header/​algorithm|''<​algorithm>''​]] fournissant des fonctions comme par exemple :
  
 +<code cpp>
 +template<​ class inputIterator,​ class T >
 +inputIterator find( inputIterator first, inputIterator last, const T& value );
 +</​code>​
  
 +qui recherche l'​élément ''​value''​ dans une séquence délimitée par deux itérateurs ''​inputIterator''​ ''​first''​ et ''​last''​.
 +
 +Certains algorithmes de [[https://​en.cppreference.com/​w/​cpp/​header/​algorithm|''<​algorithm>''​]] nécessitent des opérateurs supportant des opérations complémentaires comme par exemple ​
 +
 +<code cpp>
 +template<​ class randomIterator>​
 +void sort(randomIterator first, randomIterator last);
 +</​code>​
 +
 +qui classe l'​ensemble des éléments situés dans la séquence délimitée par deux itérateurs ''​first''​ et ''​last''​. Cependant ces itérateurs ne sont pas des itérateurs simples que l'on qualifie [[https://​en.cppreference.com/​w/​cpp/​named_req/​InputIterator|d'​input itérator]] mais des itérateurs supportant des accès par indexation que l'on qualifie [[https://​en.cppreference.com/​w/​cpp/​named_req/​RandomAccessIterator|de random iterator]].
 +
 +===== Les différents types d'​itérateur =====
 +
 +C++ introduit différentes types d'​itérateur qui sont rapidement énumérés ici :
 +
 +|[[https://​en.cppreference.com/​w/​cpp/​named_req/​InputIterator|''​input iterator''​]] | itérateur permettant d'​accéder en lecture à une donnée, supportant l'​opération de comparaison et enfin le passage à l'​élément suivant.|
 +|[[https://​en.cppreference.com/​w/​cpp/​named_req/​OutputIterator|''​input iterator''​]] | itérateur permettant d'​écrire des données par exemple dans un flux supportant le passage à l'​élément suivant.|
 +|[[https://​en.cppreference.com/​w/​cpp/​named_req/​ForwardIterator|''​forward iterator''​]] | ajoute à l'​itérateur ''​input operator''​ la garantie que si ''​a''​ et ''​b''​ sont deux itérateurs de même type, si ''​a == b''​ alors ''​++a == ++b''​.|
 +|[[https://​en.cppreference.com/​w/​cpp/​named_req/​BidirectionalIterator|''​bidirectional iterator''​]] | ajoute à l'​itérateur ''​forward iterator''​ la possibilité de revenir à l'​élément précédent ((''​operator --()''​).|
 +|[[https://​en.cppreference.com/​w/​cpp/​named_req/​RandomAccessIterator|''​random access iterator''​]] | ajoute à l'​itérateur ''​bidirectional iterator''​ la possibilité de se déplacer par saut de x éléments en avant ou en arrière.|
 +
 +Un algorithme peut ne fonctionner qu'​avec un type particulier d'​itérateur. Ainsi un algorithme de tri comme [[https://​gist.github.com/​svdamani/​dc57e4d1b00342d4507d|quicksort ou merge sort]] auront le plus souvent besoin que l'on leur fournissent un ''​random access iterator''​.
  
  
  
  
cpp/stl/iterator.1617789486.txt.gz · Last modified: 2021/04/07 09:58 by bmonsuez