首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'size_t‘vs 'container::size_type’

'size_t‘vs 'container::size_type’
EN

Stack Overflow用户
提问于 2009-05-27 23:56:57
回答 3查看 49.4K关注 0票数 120

size_tcontainer::size_type之间有区别吗?

我所理解的是,size_t更通用,可以用于任何size_type

但是container::size_type是否针对特定类型的容器进行了优化?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-28 00:00:10

标准容器将size_type定义为Allocator::size_type的类型定义(分配器是一个模板参数),对于std::allocator<T>::size_type,它通常是定义为size_t (或兼容类型)。因此,对于标准情况,它们是相同的。

但是,如果使用自定义分配器,则可以使用不同的基础类型。因此,为了获得最大的通用性,container::size_type更可取。

票数 116
EN

Stack Overflow用户

发布于 2009-05-28 10:32:40

  • size_t被定义为用于对象大小的类型,是容器平台dependent.
  • container::size_type是用于容器中元素数量的类型,是容器dependent.

所有std容器都使用size_t作为size_type,但是每个独立库供应商都会选择一种适合其容器的类型。

如果你查看qt,你会发现Qt容器的size_type是依赖于版本的。在Qt3中,它是unsigned int,在Qt4中,它被改为int

票数 46
EN

Stack Overflow用户

发布于 2009-05-28 00:14:15

对于std::[w]stringstd::[w]string::size_type等于std::allocator<T>::size_type,后者等于std::size_t。对于其他容器,它是一些实现定义的无符号整数类型。

有时候,拥有确切的类型是很有用的,例如,知道类型的位置(比如UINT_MAX),这样就可以利用它。或者对于模板,您确实需要将两个相同的类型传递给函数/类模板。

我经常发现我使用size_t来简化或迭代器。在泛型代码中,由于您通常不知道模板用于哪个容器实例以及这些容器的大小,因此如果需要存储容器大小,则必须使用Container::size_type类型定义。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/918567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档