This shows you the differences between two versions of the page.
| 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''. | ||