Les directives pour l'écriture d'un conteneur STL personnalisé
Lors de la conception d'un nouveau conteneur qui adhère aux conventions STL, il est crucial de suivre certaines directives pour garantir son bon comportement et son intégration avec la bibliothèque STL.
Interface d'itérateur :
- Définir un classe d'itérateur avec une balise iterator_category appropriée, telle que input_iterator_tag, output_iterator_tag, forward_iterator_tag, bidirectionnel_iterator_tag ou random_access_iterator_tag.
- Fournir des fonctions membres pour la comparaison (==, !=), l'incrémentation/décrémentation ( , --), l'arithmétique ( , -) et déréférencement (*, ->) opérations.
Const Iterator :
- Fournir une classe const_iterator imbriquée dans la classe itérateur, permettant une itération sur des conteneurs constants.
- Définissez les mêmes fonctions membres que l'itérateur non const, mais avec des références const et pointeurs.
Comparaison et affectation :
- Implémenter des opérateurs de comparaison (==, !=, , =) pour le conteneur lui-même.
- Fournir un opérateur d'affectation qui prend une référence à un autre conteneur.
Capacité et Accès :
- Inclure des fonctions membres telles que empty(), size(), max_size() pour gérer la taille et la capacité du conteneur.
- Fournir start(), end( ), cbegin(), cend(), rbegin(), rend(), crbegin() et crend() pour accéder aux itérateurs représentant les éléments du conteneur.
- Définissez des fonctions comme front(), back(), at() et Operator[] pour accéder ou modifier des éléments.
Insertions et suppressions :
- Implémenter emplace_front() , emplace_back(), push_front(), push_back(), pop_front() et pop_back() pour l'insertion et la suppression d'éléments.
- Fournir Fonctions membres emplace(), insert() et delete() pour insérer et supprimer des éléments dans le conteneur.
Divers :
- Inclure une fonction membre swap() pour échanger le contenu de deux conteneurs du même type.
- Implémentez get_allocator() pour récupérer l'allocateur associé au conteneur.
- Définissez une fonction swap() autonome pour échanger des conteneurs du même type.
Test :
Pour garantir la fiabilité de votre conteneur, utilisez une classe de test comme la classe de testeur fournie pour vérifier que :
- La durée de vie de l'objet est correctement gérée.
- Les appels de fonction ne modifient pas la l'état de l'objet de manière inattendue.
- Le conteneur fonctionne correctement lorsqu'il est créé avec et sans objets globaux.