Lorsque j'ai essayé de pratiquer une structure de données de base telle que Linked/Doublement Lié/Recyclé Lié/Recyclé Liste Doublement Liée, Arbre AVL, Arbre Rouge-Noir, B-Tree et Treap en les implémentant dans Swift 2, j'ai décidé de faire de telles choses en profitant de la nouvelle fonctionnalité de Swift 2: enum indirect, car enum fait un nœud vide et un nœud rempli plus sémantique que la classe. Mais bientôt, il a été constaté que pour les listes chaînées non recyclables, renvoyer le noeud inséré après l'insertion d'un élément n'a aucun sens car la valeur renvoyée est un type de valeur mais pas un type de référence. Il est dit que vous ne pouvez pas accélérer l'insertion suivante en écrivant des informations directement dans la valeur retournée car il s'agit d'une copie du nœud inséré mais pas d'une référence au nœud inséré. Ce qui est pire, c'est que muter un nœud indirect enum signifie écrire tout le paquet de données de la valeur associative, ce qui introduit définitivement une consommation inutile de ressources système, car la valeur associative dans chaque cas d'énumération est un tuple par essence, qui est une sorte de données contiguës dans la mémoire par essence, qui est la même à struct mais n'a pas d'accesseur de propriété pour permettre un petit groupe d'écriture de données.Énumération indirecte ou classe, laquelle devrais-je utiliser pour construire des structures de données de base?
Alors, lequel dois-je utiliser pour construire ces structures de données de base? Enum indirect ou classe?