Je n’ai pas pu trouver trop d’informations à leur sujet en ligne. Quels sont-ils et quand sont-ils généralement utilisés?
Merci.
Une liste intrusive est une liste dans laquelle le pointeur sur le nœud de liste suivant est stocké dans la même structure que les données de nœud. C’est normalement une mauvaise chose, car il lie les données à la mise en œuvre de liste spécifique. La plupart des bibliothèques de classes (par exemple, la bibliothèque standard C ++) utilisent des listes non intrusives, où les données ne connaissent rien à la mise en oeuvre de la liste (ou des autres conteneurs).
J’aime réellement le modèle intrusif
Intrusif est BON
Vous avez juste besoin de savoir ce que vous faites (ce qui est vrai pour tout conteneur)
Les listes intrusives sont des listes où les objects sont eux-mêmes des têtes ou des cellules de listes. Ce sont des bonnes ou des mauvaises choses selon le contexte.
Dans certains modules définis (groupe de classes insécable travaillant ensemble), il peut s’agir du MEILLEUR moyen de lier les relations entre les classes. Ils permettent la gestion directe et complète sans frais de relations communes telles que l’unicité (ex: les pommes n’apparaissent pas deux fois dans les applets, et cela ne nécessite aucune clé, et les pommes n’appartiennent pas à deux arbres distincts), elles sont navigables. dans les deux sens (access direct à une pomme donnée et à des pommes à une pomme). Toutes les opérations de base sont O (1) (pas de recherche dans un conteneur externe).
Les listes intrusives sont TRES BAD entre deux modules. Parce qu’ils seront liés ensemble et que la justification des modules est la gestion de l’indépendance du code.
Voici une brève description valable pour les listes également:
L’object à stocker contient des informations supplémentaires pour permettre l’intégration dans le conteneur. Exemple:
struct Node { Node * next; // Additionnel Node * prev; // information Données T; }1. Avantages:
- stocke les objects eux-mêmes.
- n’implique pas de gestion de la mémoire.
- l’itération est plus rapide.
- meilleures garanties d’exception.
- prévisibilité dans l’insertion et la suppression d’objects. (Aucune gestion de mémoire supplémentaire (non prévisible) n’est requirejse.)
- meilleure localité de mémoire.
2. Inconvénients:
- contient des données supplémentaires pour l’intégration du conteneur. (chaque type de magasin doit être adapté (modifié) aux exigences du conteneur.)
- attention aux éventuels effets secondaires lors de la modification du contenu de l’object stocké (notamment pour les conteneurs associatifs).
- gestion de la durée de vie de l’object inséré, indépendamment du conteneur.
- L’object peut éventuellement être supprimé avant d’être effacé du conteneur, ce qui entraîne l’invalidation de l’iterator.
- les contenants intrusifs sont NON copiables et NON assignables.
L’object ne “sait” pas et contient des détails sur le conteneur dans lequel doit être stocké. Exemple:
struct Node { Données T; }1. Avantages:
- ne contient pas d’informations supplémentaires concernant l’intégration du conteneur.
- la durée de vie de l’object gérée par le conteneur. (moins complexe.)
2. Inconvénients:
- stocker des copies des valeurs passées par l’utilisateur. (construction sur place possible.)
- un object ne peut appartenir qu’à un seul conteneur. (ou le contact devrait stocker les pointeurs sur les objects.)
- frais généraux sur le stockage des copies. (comptabilité sur chaque affectation.)
les objects non-copiables ou non-mobiles NE PEUVENT PAS être stockés dans des conteneurs non intrusifs.- ne peut pas stocker d’object dérivé et conserve toujours son type d’origine (trancher – perd le polymorphism.)