Y a-t-il une différence entre size_t
et container::size_type
?
Ce que je comprends est size_t
plus générique et peut être utilisé pour tout size_type
art.
Mais est-il container::size_type
optimisé pour certains types de conteneurs?
c++
size-type
container-data-type
Charles Khunt
la source
la source
N1804
et je ne vois aucune relation entreAllocator::size_type
etsize_type
. Un rapide coup d'œil à libstdc ++ ne montre rien de semblable non plus.size_t
le pari était la mise en œuvre pratique de ces contraintes. Cependant, dans C ++ 11, il est maintenant défini essentiellement comme:std::make_unsigned<X::difference_type>::type
par défaut. Ce qui, en pratique, sera probablement le même ou compatible avecsize_t
.size_type
dépréciation. Ce qui donne?size_t
est défini comme le type utilisé pour la taille d'un objet et dépend de la plate - forme .container::size_type
est le type utilisé pour le nombre d'éléments dans le conteneur et dépend du conteneur .Tous les
std
conteneurs utilisentsize_t
comme lesize_type
, mais chaque fournisseur de bibliothèque indépendant choisit un type qu'il trouve approprié pour son conteneur.Si vous regardez qt, vous constaterez que le
size_type
des conteneurs Qt dépend de la version. Dans Qt3 c'était le casunsigned int
et dans Qt4, il a été changé enint
.la source
int
plutôt quessize_t
,int
c'est un peu petit.Car
std::[w]string
,std::[w]string::size_type
est égal àstd::allocator<T>::size_type
, qui est égal à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, donc par exemple, on sait où le type s'enroule (comme, vers
UINT_MAX
) afin de pouvoir l'utiliser. Ou pour les modèles, où vous devez vraiment passer deux types identiques aux modèles de fonction / classe.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 leContainer::size_type
typedef si vous devez stocker la taille des conteneurs.la source