Mögliche Duplizieren:
Why does the C++ standard algorithm “count” return a ptrdiff_t instead of size_t?Warum gibt std :: count (_if) iterator :: difference_type statt size_t zurück?
Es gibt Algorithmus std::count
/std::count_if
in Standard C++.
template<class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count(InputIterator first, InputIterator last, const T& value);
template<class InputIterator, class Predicate>
typename iterator_traits<InputIterator>::difference_type
count_if(InputIterator first, InputIterator last, Predicate pred);
Effekte: Gibt die Anzahl der Iteratoren i im Bereich von [ersten, für die letzte) folgende entsprechenden Bedingungen halten: * i == Wert, pred (* i) = false!.
difference_type
ist iterator's difference_type
, die negativ sein kann, aber count
nur Wert> = 0. Warum difference_type
und nicht size_t
zum Beispiel zurückkehren können?
Danke, tolle Erklärung. – ForEveR
@DietmarKuehl Aber warum ist 'iterator_traits :: difference_type' eine bessere Wahl? In den meisten Fällen handelt es sich um eine 8-Byte-Ganzzahl mit Vorzeichen, die das Argument, dass 'size_t' (8-Byte-Ganzzahl ohne Vorzeichen) möglicherweise nicht groß genug ist, bereits zerlegt. –
@GrimFandango: Wie wirken sich die für andere Iteratoren getroffenen Entscheidungen auf meine Wahl von "EnhancedIterator :: difference_type" aus? Der Punkt ist, dass die Verwendung von 'std :: size_t' verhindern würde, dass spezielle Fälle spezielle Auswahlen verwenden, während die Verwendung des geschachtelten Typs es erlaubt, geeignete Auswahlen zu treffen. –