源代码:
#include <vector>
using namespace std;
int main()
{
vector<int> vec(20, 10);
return 1;
}
分析:
vector实现中有两个函数,一个是vector(size_type _Count, const _Ty& _Val) ,一个是模板函数vector(_Iter _First, _Iter _Last) 。该例中,它将调用模板函数,因为20和10都是int类型,而size_type是unsigned int,故调用模板函数。
// vector 497
template<class _Iter>
vector(_Iter _First, _Iter _Last) : _Mybase()
{ // construct from [_First, _Last)
_Construct(_First, _Last, _Iter_cat(_First));
}
_Iter_cat类型推导:_Iter_cat<int> --> iterator_traits<int> --> _Int_iterator_tag。
// vector 511
template<class _Iter>
void _Construct(_Iter _Count, _Iter _Val, _Int_iterator_tag)
{ // initialize with _Count * _Val
size_type _Size = (size_type)_Count;
_Construct_n(_Size, (_Ty)_V