在算法中,我可以通过迭代器直接确定
value_type
,即iter::value_type
。为什么算法要使用iterator_traits
来做同样的事情呢?#include <iostream>
#include <vector>
#include <iterator>
#include <typeinfo>
using namespace std;
template<typename iter>
void for_each(iter first, iter end)
{
cout << "container value type: "
<< typeid(typename iter::value_type).name()
<< endl;
cout << "container value type: "
<< typeid(typename iterator_traits<iter>::value_type).name()
<< endl;
}
int main()
{
vector<int> v1;
for_each(begin(v1), end(v1));
return 0;
}
输出:
container value type: i
container value type: i
std::vector<bool>
。std::iterator_traits<std::vector<bool>::iterator>::value_type
是bool
,但是decltype
或者auto
会给你一些内部位引用包装类型,几乎肯定不是你想要的。 - Miles Budnekstd::vector<bool>
。std::iterator_traits<std::vector<bool>::iterator>::value_type
是bool
,但是decltype
或者auto
将会给你一个内部的位引用封装类型,几乎肯定不是你想要的。 - Miles Budnek