Gibt es einen Unterschied zwischen size_t
und container::size_type
?
Was ich verstehe, ist size_t
allgemeiner und kann für jedes size_type
s verwendet werden.
Aber ist container::size_type
für bestimmte Arten von Containern optimiert?
c++
size-type
container-data-type
Charles Khunt
quelle
quelle
N1804
und sehe keine Beziehung zwischenAllocator::size_type
undsize_type
. Ein kurzer Blick auf libstdc ++ zeigt auch nichts Ähnliches.size_t
war die Wette praktische Umsetzung dieser Einschränkungen. In C ++ 11 ist es jetzt jedoch im Wesentlichen wie folgt definiert:std::make_unsigned<X::difference_type>::type
Standardmäßig. Was in der Praxis wahrscheinlich gleich oder kompatibel sein wirdsize_t
.size_type
. Was gibt?size_t
ist definiert als der Typ, der für die Größe eines Objekts verwendet wird, und ist plattformabhängig .container::size_type
ist der Typ, der für die Anzahl der Elemente im Container verwendet wird und containerabhängig ist .Alle
std
Container werdensize_t
als verwendetsize_type
, aber jeder unabhängige Bibliotheksanbieter wählt einen Typ aus, den er für seinen Container als geeignet erachtet.Wenn du siehst qtSie werden feststellen, dass der
size_type
von Qt-Containern versionabhängig ist. In Qt3 war esunsigned int
und in Qt4 wurde es geändertint
.quelle
int
nichtssize_t
,int
ist ziemlich klein.Für
std::[w]string
,std::[w]string::size_type
gleich iststd::allocator<T>::size_type
, die die gleiche iststd::size_t
. Für andere Container ist es eine Implementierung, die einen vorzeichenlosen Ganzzahltyp definiert.Manchmal ist es nützlich, den genauen Typ zu haben, damit man zum Beispiel weiß, wo sich der Typ befindet (wie, um
UINT_MAX
), damit man davon Gebrauch machen kann. Oder für Vorlagen, bei denen Sie zwei identische Typen wirklich an Funktions- / Klassenvorlagen übergeben müssen.Oft finde ich, dass ich
size_t
für Kürze oder Iteratoren sowieso verwenden. Da Sie im allgemeinen Code im Allgemeinen nicht wissen, mit welcher Containerinstanz Ihre Vorlage verwendet wird und welche Größe diese Container haben, müssen SieContainer::size_type
typedef verwenden, wenn Sie die Containergröße speichern müssen.quelle