Introduction à Iterator en C ++

La traversée de vos données hautement complexes stockées dans différents types de conteneurs tels qu'un tableau, un vecteur, etc. dans le plus court temps d'exécution est possible grâce à l'itérateur en C ++, un composant de la bibliothèque de modèles standard (STL). Ne vous inquiétez pas, c'est juste un pointeur comme un objet mais c'est intelligent car peu importe le conteneur que vous utilisez, cela rendra votre algorithme indépendant du type de conteneur en fournissant une interface commune pour tous les types de conteneurs comme un pont entre algorithme et conteneur. Iterator réduit non seulement la complexité d'un programme, mais accélère beaucoup plus le temps d'exécution.

Par exemple, l'algorithme sort () qui a deux paramètres, l'itérateur de fin et de début effectuera le tri dans l'ordre indépendamment du type de conteneur que vous utilisez. Iterator permet l'application d'algorithmes génériques aux structures de données. Les structures de données peuvent utiliser un itérateur pour exposer une gamme d'éléments.

Opérations utilisant l'itérateur

  • begin (): Cette fonction renverra un itérateur pointant vers le premier élément du conteneur.
  • end (): Cette fonction retournera un itérateur pointant vers le passé le dernier élément du conteneur.
  • Advance (): cette fonction incrémente une position d'itérateur à l'argument spécifié.
  • next (): Cette fonction retournera le nouvel itérateur qui sera pointé par l'itérateur après incrémentation des positions dans les arguments.
  • previous (): Cette fonction retournera le nouvel itérateur qui sera pointé par l'itérateur après décrémentation des positions dans les arguments.
  • inserter (): Cette fonction insérera l'élément à n'importe quelle position dans le conteneur.

Mise en œuvre pratique

1. Code C ++ pour implémenter l'itérateur

Code

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
std::vector v(1, 2, 3, 4, 5, 6, 7);
//Declaring Iterator
vector::iterator i;
//Function for iterating through vector elements
for(i=v.begin();i!=v.end();i++)
(
std::cout << *i <<" ";
)
return 0;
)

Production:

2. Code C ++ pour montrer la fonctionnalité de l'itérateur

Code

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
vector v(1, 2, 3, 4, 5, 6, 7, 8);
//Declaring Iterator
vector::iterator i;
//Function
v.insert(v.begin()+1, 10);
for(i=v.begin();i!=v.end();i++) (
cout << *i <<" ";
)
return 0;
)

Production:

Catégories d'itérateurs

À partir de C ++ 17, il existe 5 types d'itérateurs différents qui peuvent être classés en fonction du type de fonctionnalité, comme indiqué dans l'organigramme ci-dessous:

  • Itérateur d'entrée (stdin) : en raison des fonctionnalités limitées, ils sont les plus faibles de tous les itérateurs avec une fonctionnalité de lecture seule et de déplacement vers l'avant. Il ne peut pas modifier la valeur du conteneur. L'opérateur de déréférence (*), l'opérateur non égal (! =), L'opérateur d'incrémentation (++) et l'opérateur égal (==) peuvent être utilisés comme itérateurs d'entrée. Également pour les opérations d'entrée séquentielles.
  • Itérateur de sortie (stdout): Itérateur uniquement pour le stockage, itérateur en écriture seule qui est utilisé pour modifier la valeur d'un conteneur. Ils ont également des fonctionnalités très limitées. L'itérateur ne peut pas accéder à l'élément. L'opérateur d'affectation (=) et l'opérateur d'incrémentation (++) peuvent être utilisés comme itérateurs de sortie. Uniquement dans un algorithme à passage unique.
  • Itérateur en avant (liste liée individuellement): cet itérateur contient les fonctionnalités des itérateurs d'entrée et de sortie. Il peut avancer dans la direction avec un pas à la fois. Pour lire et écrire dans un conteneur, c'est l'itérateur le plus préféré qui prend en charge la réutilisation et l'enregistrement. Il prend en charge tous les opérateurs ci-dessus.
  • Itérateur bidirectionnel (liste doublement liée): Comme son nom l'indique déjà bidirectionnel, ce qui le rend plus fort que les itérateurs ci-dessus. Il prend également en charge la lecture et l'écriture dans un conteneur. Il prend en charge l'opérateur Decrement (-).
  • Itérateur à accès aléatoire (tableaux): l' itérateur le plus puissant est l'itérateur le plus puissant car il peut lire, écrire et accéder de manière aléatoire. Fonctionnalité de type pointeur comme l'ajout et la soustraction de pointeurs.

Avantages d'itérateur en C ++

Si vous devez vous déplacer d'un élément que l'itérateur pointe actuellement vers un autre élément qui est potentiellement à n pas de votre itérateur actuel. Les quatre premiers de la hiérarchie prendront un temps linéaire pour le faire alors qu'un itérateur à accès aléatoire peut le faire en temps constant et c'est beaucoup plus fascinant car c'est là que le temps est économisé. C'est la fonctionnalité la plus importante qu'un itérateur offre. Quelques autres sont mentionnés ci-dessous

  • Efficacité du code: si nous avons P types de conteneurs de données et Q choses que nous voulons faire avec eux, nous finirons par écrire des algorithmes P * Q. Si les données sont également de R types différents, nous pourrions nous retrouver avec l'algorithme P * Q * R. Donc, en utilisant les itérateurs, nous pouvons le faire dans l'algorithme P + Q. Nous avons économisé 90% du temps et du travail. Faire passer l'efficacité du code au niveau supérieur. Le concept derrière l'efficacité est que l'itérateur d'entrée sur la source et l'itérateur de sortie sur la séquence cible n'ont pas besoin d'être du même type.
  • Traitement dynamique: les itérateurs ont des fonctionnalités dynamiques telles que l'échange dans le même conteneur, assignable à la copie, incrémentation, déréférencement et décrémentation. L'itérateur fournit la fonctionnalité pour supprimer et ajouter dynamiquement des éléments au conteneur. Comme tous les itérateurs peuvent être incrémentés, les itérateurs d'entrée peuvent être comparés et déréférencés à une valeur. Les itérateurs bidirectionnels peuvent être décrémentés. L'aspect principal est d'écrire une fonction et de l'utiliser pour n'importe quel conteneur.

Inconvénients d'itérateur en C ++

  • Vous ne pouvez pas passer d'une structure de données à une autre en même temps de manière complexe. Iterator ne fonctionnera pas dans ce cas.
  • Si vous traitez une liste et que vous avez oublié quelque chose et que vous voulez maintenant revenir en arrière, vous ne pouvez pas, car les itérateurs ne fonctionneront pas de cette façon.
  • Au cas où vous auriez besoin de mettre à jour la structure pendant la traversée, vous ne pouvez pas le faire aussi à cause de la manière itérative de stocker sa position.

Conclusion

Lors de l'utilisation d'itérateurs, gardez toujours ces deux choses à l'esprit pour rendre le code efficace. Passez toujours l'itérateur dans une fonction au lieu de conteneurs. Vous ne devez jamais retourner des conteneurs au lieu de retourner ou passer l'itérateur. Vous pouvez obtenir n'importe quel élément à l'aide d'un itérateur, déréférencer et passer une paire de l'itérateur à un algorithme

Articles recommandés

Ceci est un guide de l'itérateur en C ++. Nous discutons ici des opérations dans l'itérateur, des catégories, des avantages et des inconvénients avec les codes et les sorties. Vous pouvez également consulter nos autres articles connexes pour en savoir plus-

  1. Tableaux en C ++
  2. Qu'est-ce que C ++
  3. Fonctions de tableau C ++
  4. Boucles en C ++
  5. Fonctions de tableau PHP | Types de fonctions de tableau en PHP