size_t和container::size_type之间有区别吗?
我所理解的是,size_t更通用,可以用于任何size_type。
但是container::size_type是否针对特定类型的容器进行了优化?
发布于 2009-05-28 00:00:10
标准容器将size_type定义为Allocator::size_type的类型定义(分配器是一个模板参数),对于std::allocator<T>::size_type,它通常是,定义为size_t (或兼容类型)。因此,对于标准情况,它们是相同的。
但是,如果使用自定义分配器,则可以使用不同的基础类型。因此,为了获得最大的通用性,container::size_type更可取。
发布于 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。
发布于 2009-05-28 00:14:15
对于std::[w]string,std::[w]string::size_type等于std::allocator<T>::size_type,后者等于std::size_t。对于其他容器,它是一些实现定义的无符号整数类型。
有时候,拥有确切的类型是很有用的,例如,知道类型的位置(比如UINT_MAX),这样就可以利用它。或者对于模板,您确实需要将两个相同的类型传递给函数/类模板。
我经常发现我使用size_t来简化或迭代器。在泛型代码中,由于您通常不知道模板用于哪个容器实例以及这些容器的大小,因此如果需要存储容器大小,则必须使用Container::size_type类型定义。
https://stackoverflow.com/questions/918567
复制相似问题