iterator_category
Posted Fate0729
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iterator_category相关的知识,希望对你有一定的参考价值。
/* * 迭代器类型 * 1. input ierator * 2. write iterator * 3. forward iterator 在迭代器所形成的区间上进行读写操作 * 4. bidirectional iterator 可双向移动 * 5. random access iterator */ // 在执行时期决定使用哪一个版本会影响程序效率,最好在编译期选择正确的版本,重载机制可以实现这个目标 // 任何一个迭代器,其类型永远应该落在“该迭代器所隶属之各种类型中最强化的那个” // STL算法的一个命名规则:以算法所能接受之最地接迭代器类型来为其迭代器性别参数命名 #pragma once template <class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&> struct iterator { typedef Category iterator_category; typedef T value_type; typedef Distance difference_type; typedef Pointer pointer; typedef Reference reference; }; // 继承关系的灵活应用 // class只作标记,不需要任何成员 struct B{}; struct C : public B{}; struct D : public C{}; template <class TT> void fun(TT& p, B b) { cout << "B version" << endl; } template <class TT> void fun(TT& p, D d) { cout <<"D version" <<endl; } int main() { int nn = 10; fun(nn, B()); fun(nn, C()); fun(nn, D()); return 0; }
以上是关于iterator_category的主要内容,如果未能解决你的问题,请参考以下文章
STL源码剖析——iterators与trait编程#3 iterator_category