2017-08-25 2 views
14

vector<int> hat beide vector<int>::size_type und vector<int>::difference_type. Es scheint nicht notwendig zu sein, dass beide existieren, da size_type garantiert in der Lage ist, einen Wert so groß wie die maximale Anzahl von Elementen zu halten, die ein vector<int> auf einem gegebenen System enthalten kann, und in jedem gültigen Anwendungsfall sollte difference_type notwendigerweise kleiner sein als oder gleich der maximalen Anzahl von Elementen, dh der Abstand zwischen zwei Elementen in einem sequentiellen Container ist nie größer als die maximale Anzahl von Elementen, die der sequentielle Container enthalten kann. Könnte jemand ein Beispiel geben, wo es eine nützliche Unterscheidung zwischen den beiden gibt?Warum haben sequentielle Container sowohl size_type als auch difference_type?

+0

Wenn man zwei verschiedene Typen für 'size' und' difference' verwendet, wird dies von einigen als Fehler im ursprünglichen Design von STL angesehen. Also nicht zu viel darauf legen. Siehe zum Beispiel. https://www.youtube.com/watch?v=wvtFGa6XJDU – alfC

Antwort

27

container::difference_type existiert, weil für einige Sequenzcontainer Iteratoren subtrahiert werden können. Diese Subtraktion kann zu einer negativen Zahl führen. Sie können container::size_type nicht für dieses Ergebnis verwenden, da es nicht signiert ist, so dass Sie nie einen negativen Wert haben. So haben wir container::difference_type, die eine vorzeichenbehaftete Ganzzahl ist, die die difference_type des Iterators des Containers ist.

+0

Was bedeutet es, "Iteratoren zu subtrahieren"? Wann ist es eine sinnvolle Operation? – Dai

+1

@Dai Um den Abstand zwischen zwei Elementen in einem Container zu finden? – Tas

Verwandte Themen