Warum die "Anfang / Ende" vs "erste / letzte" Diskrepanz? [geschlossen]

7

Warum bieten Container " begin " / " end " Iteratoren an, während Algorithmen " first " / " last " Iteratoren wollen?

Zum Beispiel:

Bearbeiten: Eine noch größere Diskrepanz gefunden. Es sind nicht nur Algorithmen , die " first / last " verwenden, sondern auch Container-Konstruktoren (wie vector(first, last, ...) ).

Ich habe alle Container und Algorithmen nicht überprüft, aber ein paar mehr und alle angebotenen Container überprüft begin / end und alle gewünschten Algorithmen first / last (oder Variationen wie first1 und first2 ).

Gibt es einen guten Grund dafür? Für mich wäre es sinnvoller, wenn sie alle gleich wären. Vorzugsweise begin und end , da ich last nicht mag, weil das inklusive klingt aber nicht ist. Für Algorithmen würde es einfach bedeuten, dass der Anfang und das Ende des Bereichs verarbeitet werden, so wie es jetzt zuerst und zuletzt gemeint ist.

    
Stefan Pochmann 12.02.2017, 10:45
quelle

3 Antworten

7

Der Grund liegt wahrscheinlich in der Vergangenheit: So nannten sie Stepanov und Lee, die ersten Implementierer von STL, die später zur C ++ - Standardbibliothek wurden.

Hier ist Stepanovs Artikel über STL . Page 47 beschreibt sort

%Vor%

beschreibt die Containeroperationen begin() und end() .

Beachten Sie, dass zusätzlich zu begin / first und end / last die C ++ - Standardbibliothek die optionalen Sequenzoperationen front() und back() beschreibt. Der Unterschied in der Benennung ist hier leicht zu verstehen, da die Operationen für denselben Container verfügbar sein müssen und back() inklusive ist.

    
dasblinkenlight 12.02.2017, 10:58
quelle
10

first und last können zwei beliebige Iteratoren sein, solange last nicht "vor" first ist. Sie müssen nicht Anfang und Ende eines Containers sein.

    
Code-Apprentice 12.02.2017 10:50
quelle
4

Es wäre noch verwirrender, wenn Container und Algorithmen sie auf die gleiche Weise benennen würden. Der ganze Sinn von Algorithmen, die Iteratoren verwenden, besteht darin, dass sie nicht die begin und end eines Containers sein müssen, sondern sie können beliebige Iteratoren sein. Die Tatsache, dass Sie als Benutzer für die Übergabe eines sinnvollen Paares von first und last Iterator verantwortlich sind, unterstreicht die unterschiedlichen Namen der Schnittstellen.

Andererseits ist es ein Schwachpunkt von Algorithmen, dass sie keine Methoden anbieten, die einen Container als Parameter verwenden, wenn Sie in den meisten Fällen einfach den Algorithmus von begin bis end eines Iterators arbeiten lassen wollen.

    
user463035818 12.02.2017 11:11
quelle

Tags und Links