一 iterator tag
- 头文件< iterator >
- iterator 有不同的分类(catelogy), 每个分类对应一个tag,如下:
struct input_iterator_tag { };
struct output_iterator_tag { };
struct forward_iterator_tag : public input_iterator_tag { };
struct bidirectional_iterator_tag : public forward_iterator_tag { };
struct random_access_iterator_tag : public bidirectional_iterator_tag { };
struct contiguous_iterator_tag: public random_access_iterator_tag { }; (C++20 起)
- 例如可以根据不同的 tag 采用不同的算法。
- 如何获取 iterator 的 分类标签呢?就需要iterator_traits了。
二 iterator_traits
- 头文件< iterator >
- iterator_traits 有几个常用的成员:
成员类型 定义
difference_type Iter::difference_type
value_type Iter::value_type
pointer Iter::pointer
reference Iter::reference
iterator_category Iter::iterator_category
tempplate<typename Iterator>
void func(Iterator begin, Iterator end)
{
func_inner(begin, end, typename std::iterator_traits<Iterator >::iterator_category());
}
三 参考
iterator_traits