De nombreuses langues ont un type de file d'attente (http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html); Je suis même incapable de trouver une bibliothèque qui implémente un type de file d'attente (structure de données premier entré, premier sorti). Le manque de file d'attente me surprend. Existe-t-il une manière différente que D fasse une file d'attente?Type de file d'attente dans D?
La syntaxe je pense serait semblable à ceci:
//To create
Queue!string queue = new Queue!string;
//To add
queue.add("value");
//To access
string value = queue.get; //will remove from queue
//or
foreach (string value; queue) {}
Comment procéderait-il à D? Ou devrai-je le mettre en œuvre moi-même?
Vous pouvez également le faire assez trivialement avec un tableau simple. Vous pouvez même le faire efficacement avec un tableau et un couple de méthodes d'aide; moins de 20 lignes de code. –
C'était ce dont j'avais besoin. Je ne pouvais pas trouver de bibliothèque auparavant, mais je ne savais pas trop comment la bibliothèque pouvait être appelée. @ AdamD.Ruppe Oui c'était ce que je pensais que je devrais faire mais j'étais sûr qu'il y aurait un meilleur moyen avec moins de réaffectations de mémoire. Je n'ai jamais su comment les files d'attente au niveau bas étaient implémentées. Listes doublement chaînées (https://en.wikipedia.org/wiki/Doubly_linked_list) –
La façon dont je le ferais est un tableau circulaire (qui pourrait même être de taille statique). Comme 'ubyte start, end; T [256] file d'attente; void add_to_queue (T t) {queue [fin ++] = t; } T remove_from_queue() {return queue [début ++]; } 'Vous voudriez vraiment nettoyer certains bords bruts (comme peut-être vérifier si start == end, il est vide), mais ce code fonctionnerait plutôt bien pour beaucoup de choses, est vraiment simple, et n'a pas de réallocations de mémoire du tout. –