J'ai lu que tous les conteneurs stl fournissent une spécialisation de l'algorithme d'échange afin d'éviter d'appeler le constructeur de copie et deux opérations d'affectation que la méthode par défaut utilise. Cependant, quand j'ai pensé que ce serait bien d'utiliser une file d'attente dans un code sur lequel je travaillais j'ai remarqué que (contrairement à vector et deque) la file d'attente ne fournit pas cette méthode? J'ai juste décidé d'utiliser un deque au lieu d'une file d'attente, mais je suis toujours intéressé de savoir pourquoi c'est?Pourquoi la file d'attente std ne définit pas une spécialisation de méthode d'échange
Répondre
C++0x va ajouter un échange aux adaptateurs de conteneur comme std :: queue. Je pourrais seulement spéculer pourquoi il manque de la norme actuelle. Dans this discussion quelqu'un propose une solution de contournement:
Il y a une solution, car la norme rend les pièces nécessaires, protégées appelé héritage. [juste ne pas détruire via les adaptateurs std] créer une structure de modèle héritant de l'adaptateur désiré, fournir seulement les constructeurs et transmettre les arguments à la classe de l'adaptateur, en écrivant un membre de swap est un accroc puisque les éléments requis sont des membres protégés de les adaptateurs standards.
Je suis sûr qu'ils ont été omis comme un oubli. En toute honnêteté, j'utilise un peu std :: queue et std :: stack et je n'ai jamais eu à en échanger deux. Je pense que votre utilisation d'un deque au lieu d'une file d'attente est bien. Quelque chose comme typedef std::deque<MyType> QueueType
devrait donner assez d'un indice comment le conteneur devrait être utilisé.
Je maintiens deux ensembles d'éléments qui nécessitent un traitement, l'ensemble actuel et l'ensemble à traiter au tour suivant, donc j'ai besoin d'échanger le fichier nextQueue rempli à la place de currentQueue appauvri à la fin de chaque tour. Strictement parlant, ils n'ont pas du tout à faire la queue ... ils pourraient juste être des vecteurs en fait ... hmmm –
Avez-vous envisagé d'avoir deux pointeurs vers les files d'attente, et de les échanger à la place? – rlbond
@rlbond Lorsque la méthode d'échange est définie correctement, les conteneurs ne font qu'échanger leurs pointeurs internes, donc c'est effectivement la même chose ... et je déteste utiliser le vecteur
- 1. Pourquoi C/C++ ne définit pas l'ordre d'évaluation de l'expression?
- 2. std :: ifstream :: open() ne fonctionne pas
- 3. FCKEditor ne définit pas la propriété Value sur la publication!
- 4. Pourquoi C# ne définit-il pas une opération d'addition pour char?
- 5. Spécialisation de template partiel sur une classe
- 6. Rhino Mocks - Définit une propriété si une méthode est appelée
- 7. Je ne comprends pas std :: tr1 :: unordered_map
- 8. La méthode Javascript toSource() ne fonctionne pas
- 9. Méthode la plus efficace pour surveiller une file d'attente
- 10. MSMQ ne peut pas supprimer ou purger une file d'attente
- 11. Comment tester qu'un assistant Rails définit une méthode?
- 12. Redéfinir la méthode File :: dirname ruby
- 13. Safari ne définit pas Cookie mais IE/FF fait
- 14. pourquoi cette conversion ne fonctionne pas?
- 15. Pourquoi ne puis-je pas appeler une méthode publique dans une autre classe?
- 16. Pourquoi std :: string :: max_size() == std :: string :: allocator :: max_size()
- 17. SFAuthorizationView autoriser: la méthode ne fonctionne pas
- 18. pourquoi ne pointeur sur un tableau ne retourne pas comme **
- 19. Obtenir une erreur de trace et ne comprends pas pourquoi
- 20. Rails I18n dans vérification.rb vérifier la méthode ne fonctionne pas?
- 21. spécialisation de modèle de classe modèle
- 22. Pourquoi la requête GQL ne correspond pas?
- 23. La méthode n'est pas une fonction
- 24. pourquoi ma méthode objective c me donne une "erreur: ne peut pas utiliser un objet comme paramètre à une méthode"
- 25. Pourquoi la fusion ne consigne pas les erreurs de liaison?
- 26. Pourquoi la classe de méthode Java n'est-elle pas générique?
- 27. Pourquoi la méthode setTime() de java.util.Date n'est-elle pas obsolète?
- 28. méthode setNodeValue() ne fonctionne pas
- 29. Pourquoi les données ne sont pas récupérées en utilisant request.getParameter() lors de l'utilisation de la méthode post en html
- 30. Pourquoi je ne peux pas stocker boost :: function dans std :: list?
La question était "Y at-il une raison pour laquelle il manque?" –