In diese Frage sehe ich Folgendes:
%Vor% Ich verstehe, warum int
hier nicht verwendet wird, aber warum nicht einfach size_t
verwenden?
Unter welchen Umständen sollte ich vector<int>::size_type
anstelle von size_t
verwenden?
Die primäre Zeit für die Verwendung von size_type
liegt in einer Vorlage. Obwohl std::vector<T>::size_type
normalerweise size_t
ist, könnte some_other_container<T>::size_type
stattdessen ein anderer Typ sein 1 . Eines der wenigen Dinge, die ein Benutzer dem Namespace std
hinzufügen darf, ist eine Spezialisierung einer vorhandenen Vorlage für einen benutzerdefinierten Typ. Daher kann std::vector<T>::size_type
für einige oddball T
könnte tatsächlich ein anderer Typ als size_t
sein, obwohl die in der Standardbibliothek definierte Basisvorlage wahrscheinlich immer size_t
verwendet.
Wenn Sie also den richtigen Typ für einen bestimmten Container in einer Vorlage verwenden möchten, die mit diesem Container arbeitet, möchten Sie container::size_type
verwenden und nicht nur size_t
.
Beachten Sie jedoch, dass generischer Code selten direkt mit einem Container arbeiten sollte. Stattdessen sollte es normalerweise mit Iteratoren arbeiten, statt container<T>::size_type
würde es stattdessen etwas wie std::iterator_traits<WhateverIterator>::difference_type
verwenden.
T
könnte auch vector<T>::size_type
ein anderer Typ sein - eines der wenigen Dinge, die Sie in den Namensraum std
einfügen können, ist eine Spezialisierung einer vorhandenen Klasse für einen Benutzer -definierter Typ, für einige T
, vector<T>
könnte also ein ganz anderer Container verwendet werden als für die meisten anderen Typen. Dies ist typisch für vector<bool>
, aber auch für andere Typen möglich. Ein Grund, es zu benutzen, ist Konsistenz. Es stimmt zwar, dass size_t
ausreicht, um ein std::vector
zu indizieren / zählen, es reicht jedoch konzeptionell nicht aus, um ein std::list
oder irgendeinen anderen nicht-arraybasierten Container zu indizieren / zählen. Wenn Sie mit Containern arbeiten, sollten Sie normalerweise container_type::size_type
verwenden.
Wenn Sie im generischen Code den tatsächlichen Typ des Containers nicht kennen, haben Sie keine andere Wahl, als container_type::size_type
zu verwenden. Und selbst wenn in einem bestimmten Code bekannt ist, dass der Container ein std::vector
ist, müssen Sie keine Ausnahme machen und plötzlich zu size_t
wechseln.
Von: vector & lt; int & gt; :: size_type in C ++
" size_type
ist ein (statischer) Mitgliedstyp vom Typ vector<int>
. Normalerweise ist es ein typedef
für std::size_t
, was normalerweise ein typedef für unsigned int
oder unsigned long long
ist."