Ich habe gelesen, dass alle STL-Container eine Spezialisierung des Swap-Algorithmus bieten, um zu vermeiden, den Kopierkonstruktor und zwei Zuweisungsoperationen aufzurufen, die die Standardmethode verwendet. Wenn ich jedoch dachte, dass es schön wäre, eine Warteschlange in einem Code zu verwenden, an dem ich gerade arbeitete, bemerkte ich, dass (im Gegensatz zu Vektor und Deque) die Warteschlange diese Methode nicht bietet? Ich habe mich entschieden, statt einer Schlange eine Deque zu benutzen, aber ich bin immer noch interessiert zu wissen, warum das so ist?Warum definiert Std-Warteschlange keine Swap-Methode-Spezialisierung
Antwort
C++0x wird Swap Container-Adapter wie Std :: Warteschlange hinzufügen. Ich konnte nur spekulieren, warum es im aktuellen Standard fehlt. In this discussion jemand schlägt eine Abhilfe:
Es gibt eine Lösung, da die Standard-geschützten die benötigten Teile macht, genannt Vererbung. [einfach über die Standardadapter nicht zerstören] Erstellen Sie eine Template-Struktur erben den gewünschten Adapter, nur die Konstruktoren und Weiterleiten der Argumente an die Adapterklasse, Schreiben eines Swap-Mitglied ist ein Kinderspiel, da die erforderlichen Elemente geschützte Mitglieder sind von die Standardadapter.
Ich bin sicher, dass sie als ein Versehen weggelassen wurden. Bei aller Fairness verwende ich std :: queue und std :: stack ziemlich viel und habe noch nie zwei ausgetauscht. Ich denke, Ihre Verwendung einer Deque statt einer Warteschlange ist in Ordnung. Etwas wie typedef std::deque<MyType> QueueType
sollte einen Hinweis geben, wie der Container verwendet werden sollte.
Ich führe zwei Sätze von Elementen, die verarbeitet werden müssen, die aktuelle Menge und die Menge, die in der nächsten Runde verarbeitet werden, also muss ich am Ende jeder Runde die aufgefüllte nextQueue anstelle der depleted currentQueue tauschen. Streng genommen müssen sie überhaupt keine Warteschlangen sein ... sie könnten einfach Vektoren sein ... hmmm –
Haben Sie darüber nachgedacht, zwei Zeiger auf Warteschlangen zu haben und sie stattdessen zu tauschen? – rlbond
@rlbond Wenn die Swap-Methode richtig definiert ist, tauschen die Container nur ihre internen Zeiger, so dass es effektiv das gleiche ist ... und ich hasse die Verwendung von Vektor
- 1. Warum definiert C# keine Additionsoperation für Chars?
- 2. Keine Transportmethode definiert: Kalenderereignis
- 3. Warum ist rsize_t definiert?
- 4. RMagick/ImageMagick keine primitiven definiert
- 5. nodemailer [Fehler: Keine Transportmethode definiert]
- 6. Text zu Bild, Fehlermeldung "keine Bilder definiert"
- 7. C# catch (DataException) - keine Variable definiert
- 8. Warum ist ReactRedux nicht definiert?
- 9. Warum definiert ES6 map.length == 0?
- 10. Warum sind Objektantworten nicht definiert?
- 11. Warum ist JSONObject.length nicht definiert?
- 12. Warum Observer nicht definiert ist
- 13. Warum definiert GLib Typen neu?
- 14. Warum definiert unary_function nicht operator()?
- 15. Warum ist diese Erlang-Funktion nicht definiert?
- 16. Warum ist this.parent() nicht als Funktion definiert?
- 17. Warum ist ARG_MAX nicht über limits.h definiert?
- 18. Bibliothek definiert, aber keine kanonischen Namen
- 19. Unit Tests $ httpBackend Winkel keine Antwort definiert
- 20. Gdx Paydesktop keine Klasse definiert Fehler
- 21. Funktion definiert keine Variable in PHP
- 22. Im Namensraum "xxx" sind keine Befehle definiert
- 23. Keine Bohne ‚transaction‘ genannt wird, definiert
- 24. Warum verarbeitet jsdom keine Skripte?
- 25. Backbone Local Storage "nicht definiert ist keine Funktion"
- 26. Warum ist die Variable nicht definiert?
- 27. Warum definiert Iterator die Operation remove()?
- 28. Warum ist NSTimeIntervalSince1970 als festes Double definiert?
- 29. Warum ist event.namespace für Klickereignis nicht definiert?
- 30. Warum ist: fs.start_link/2 nicht definiert?
Die Frage war "Gibt es einen Grund, warum es fehlt?" –