Pour std::[w]string
, std::[w]string::size_type
est égal à std::allocator<T>::size_type
, ce qui correspond à std::size_t
. Pour les autres conteneurs, il s'agit d'un type entier non signé défini par l'implémentation.
Parfois, il est utile d'avoir le type exact, par exemple, on sait où le type s'enroule (comme, à UINT_MAX
) afin que l'on puisse en faire usage. Ou pour les modèles, où vous devez vraiment passer deux types identiques aux modèles de classe/fonction.
Souvent, je trouve que j'utilise size_t
pour la brièveté ou les itérateurs de toute façon. Dans le code générique, puisque vous ne savez généralement pas avec quelle instance de conteneur votre modèle est utilisé et quelle taille ont ces conteneurs, vous devrez utiliser le typedef Container::size_type
si vous avez besoin de stocker la taille des conteneurs.
Pouvez-vous clarifier cette réponse? J'ai repensé au projet de normes aussi loin que 'N1804' et je ne vois aucune relation entre' Allocator :: size_type' et 'size_type'. Un rapide coup d'oeil sur libstdC++ ne montre rien de similaire à cela non plus. –
@ShafikYaghmour, Donc, cette réponse est légèrement dépassée, mais pour maximiser la portabilité, je pense que le conseil est toujours bon: C++ 03 spécifié "Tableau 32: taille_type: un type qui peut représenter la taille de l'objet le plus important dans le modèle d'allocation. " À l'époque, 'size_t' était l'implémentation pratique de ces contraintes. Cependant, en C++ 11, il est maintenant défini essentiellement comme: 'std :: make_unsigned :: type' par défaut. Ce qui dans la pratique, sera probablement le même ou compatible avec 'size_t'. –
SOYEZ la réponse est incorrecte .... voir http: // stackoverflow.com/questions/4849678/c-for-loop-size-type-vs-size-t TL: DR: les allocateurs size_type doivent être size_t et en C++ 17 size_type sera obsolète tel quel. – user3063349