/*
* 迭代器类型
* 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;
}