zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    特殊集合
    推箱子
    集合
    数组

    循环语句 练习题
    穷举与迭代
    循环语句
    练习题
    switch case
  • 原文地址:https://www.cnblogs.com/xiaobingqianrui/p/7781229.html
Copyright © 2011-2022 走看看