Deq*_*ing 8 c++ int stl vector size-t
在这个问题中我看到以下内容:
for (vector<int>::size_type ix = 0; ix ! = ivec.size(); ++ix) {
ivec[ix] = 0;
}
Run Code Online (Sandbox Code Playgroud)
我明白为什么int不在这里使用,但为什么不使用size_t?
在什么情况下我应该用vector<int>::size_type而不是size_t?
Jer*_*fin 17
主要使用时间size_type是在模板中.虽然std::vector<T>::size_type通常是size_t,但some_other_container<T>::size_type可能是其他类型的1.允许用户添加到std命名空间的少数几件事之一是针对某些用户定义类型的现有模板的特化.因此,std::vector<T>::size_type对于一些奇怪的球实际上T 可能是某种类型size_t,即使标准库中定义的基本模板可能总是使用size_t.
因此,如果要对与该容器一起使用的模板内的特定容器使用正确的类型,则需要使用container::size_type而不是仅仅假设size_t.
但请注意,通用代码很少直接与容器一起使用.相反,它通常应该与迭代器一起使用,因此container<T>::size_type它通常会使用类似的东西std::iterator_traits<WhateverIterator>::difference_type.
T,vector<T>::size_type也可能是一个不同的类型 - 允许放入std命名空间的少数几件事之一是用户定义类型的现有类的特化,因此对于某些类型T,vector<T>可以完全使用与大多数其他类型不同的容器.这是典型的vector<bool>,但也可用于其他类型.使用它的一个原因是一致性.虽然确实size_t足以索引/计数a std::vector,但它在概念上不足以索引/计数一个std::list或任何其他非基于数组的容器.因此,在使用容器时,通常应该使用container_type::size_type.
在通用代码中,当容器的实际类型未知时,您别无选择,只能使用container_type::size_type.即使在特定代码中,当容器已知为a时std::vector,也不需要异常并突然切换到size_t.