trait

来源:互联网 发布:网上开淘宝怎么开 编辑:程序博客网 时间:2024/06/06 07:30
#include <iostream>#include <iterator>#include <typeinfo>#include <vector>using namespace std;//way 1template <typename iterT, typename distT>void advance11(iterT it, distT d){    //random access     if(typeid(typename iterator_traits<iterT>::iterator_category) ==         typeid(std::random_access_iterator_tag))    it +=d;}/*-----------------------------------------------------------*///way2template <typename iterT, typename distT>// worker function 1void do_advance(iterT it, distT d, std::random_access_iterator_tag){    it +=d;}template <typename iterT, typename distT>// worker function 2void do_advance(iterT it, distT d, std::bidirectional_iterator_tag){    //for(auto ptr = it,size_t dis = 0 ; dis < d ; it ++)//mine    {}    if(d >= 0) {while (d--) ++ it}    else { while ( d++ ) --it; }}template <typename iterT, typename distT>// worker function 3void do_advance(iterT it, distT d, std::input_iterator_tag) {    if( d >= 0) {while (d--)  ++ it; }    //else return;    else out_of_range(" - ");}template <typename iterT, typename distT>//boss  functionvoid advance(iterT it, distT d){    do_advance(it,d,        typename iterator_traits<iterT>::iterator_category()        );}void main(){    vector<int> v (10,0);    advance<vector<int>::iterator,size_t>(v.begin(),2);}
0 0