Die STL reference scheint zwischen einer konzeptuellen Unterschied zu machen:Warum keine Front() - Methode für std :: map (und andere assoziative Container aus der STL)?
- 'Sequence Container' (array Vektor Deque forward_list Liste) einerseits
- 'assoziative Container' (set multiset Karte multimap unordered_set unordered_multiset unordered_map unordered_multimap) auf die andere Hand.
Auch scheint es, wie wir haben:
- alle Container eine
begin()
Verfahren implementiert einen Iterator Rückkehr in den Behälter auf das erste Element zeigt. - Nur die Sequenzcontainer mit einer
front()
-Methode geben einen Verweis auf das erste Element im Container zurück.
Mein Verständnis ist, dass die front()
Verfahren leicht in Bezug auf die begin()
Methode definiert werden könnten, indem nur den Rückgabewert dereferencing.
So ist meine Frage: Warum ist nicht die front()
Methode für alle Objekte definiert die begin()
Methode definiert? (die wirklich jeder Behälter sein sollte)
(Ich denke, das aus einer semantischen Sicht ist es nicht so viel Sinn macht, das erste Element aus einer Karte zu erhalten, wie es von einem Vektor für das erste Element tut aber ich frage mich, ob es eine gültige Erklärung gab).
Die beste Antwort, die ich mir vorstellen kann, ist, dass die Schnittstelle oft im Hinblick darauf spezifiziert wird, "welche Nutzung gefördert wird", sowie "was effizient implementiert werden kann". Nicht-Sequenzcontainer können immer noch iteriert werden (also müssen sie 'begin()' und 'end()' haben, aber sie sind nicht wirklich für Situationen gedacht, in denen Sie nur das erste Element von ihnen auswählen müssen 't haben 'front()', auch wenn es implementiert werden könnte – jalf
Ok, das war, was ich dann erwartet habe Danke an alle für die Antworten Auch, wäre es nicht einfacher (wie in' reduzieren Menge an dupliziertem Code ') um die Methode für jeden Container ohne Unterschied zu definieren? – Josay
Ich bin hier nicht gerade konstruktiv, aber: http://kera.name/articles/2010/08/it-is-not-called-the- stl-mmkay/ – wolfgang