怎么做..
要获取迭代器的值类型,您应该使用std::iterator_traits from <iterator>,这将使得很容易获得包裹的值类型,并且足够通用,您甚至可以将它与pointers.
std::iterator_traits<InIter>::value_type
std::iterator_traits<char *>::value_type => char
std::iterator_traits<char const *>::value_type => char const
std::iterator_traits<std::vector<int>::iterator >::value_type => int
std::iterator_traits<std::vector<int>::const_iterator>::value_type => int const
选择
如果你正在写C++11,并有一个实例InIter
,也可以使用decltype
获得类型*it
,这实际上(在大多数/所有情况下)与std::iterator_traits<T>::value
会产生。
执行
从您的示例片段来看,您似乎并不想要值类型的迭代器,对实际更感兴趣参考类型,下面是一个示例实现:
for_each_n(param1, param2, param3,
[val](typename std::iterator_traits<InIter>::reference v){
v = val;
}
);
for_each_n(param1, param2, param3, [val](decltype(*some_it) v){
v = val;
});