首页 > 编程语言 >C++ 萃取机 Iterator Traits

C++ 萃取机 Iterator Traits

时间:2024-03-07 13:33:41浏览次数:29  
标签:typedef Iterator iterator typename C++ 萃取 Traits type 迭代

Iterator Traits

萃取出 Iterator 的性质:迭代器种类、迭代器所指数据类型、迭代器距离类型、迭代器所指数据引用、迭代器所指数据指针。根据不同的迭代器种类可以采取不同的算法策略。但是用iter::interator_categotry、iter::value_type、iter::pointer... 就可以访问到迭代器的性质,为什么还需要萃取器?

因为算法的参数可能是C指针(指针是一种特化的迭代器),而不是一个迭代器对象。

// 如果迭代器传入萃取机,没匹配到任何偏特化模板,则会匹配这个泛华的版本。
template <class I>
struct iterator_traits {
	typedef typename I::iterator_category;
  	typedef typename I::value_type;
  	typedef typename I::difference_type;
  	typedef typename I: :pointer;
  	typedef typename I::reference;
};
// 如果指针传入萃取机,会匹配到这个偏特化模板。
template <class T>
struct iterator_traits<T*> {
	typedef random_access_iterator_tag iterator category;
  	typedef T value type;
  	typedef ptrdiff_t difference type;
  	typedef T* pointer;
	typedef T& reference;
};
// 如果常指针传入萃取机,会匹配到这个偏特化模板。
template <class T>
struct iterator_traits<const T*> {
	typedef random_access_iterator_tag iterator category;
  	typedef T value type;
  	typedef ptrdiff_t difference type;
  	typedef const T* pointer;
	typedef const T& reference;
};

标签:typedef,Iterator,iterator,typename,C++,萃取,Traits,type,迭代
From: https://www.cnblogs.com/hellozhangjz/p/18058703

相关文章

  • 03_C++基本数据类型_复合类型
    主要复合类型:引用和指针1.引用允许在一条语句中定义多个引用,其中每个引用标识符都必须以&开头。#include<iostream>usingnamespacestd;intmain(){intb;int&a=b;b=6;cout<<"a:"<<a<<endl;cout<<"b:"<......
  • [转]如果继承上一任的C++库
    转自微信公众号:CSDN原文链接:https://gaultier.github.io/blog/you_inherited_a_legacy_cpp_codebase_now_what.html作者|PhilippeGaultier译者|郑丽媛有时候,也许你刚换了一份新工作,也许刚换了一个团队,也许团队中某个有经验的人刚离开,这时需要你来继承一个旧的C++ 代码......
  • Qt/C++音视频开发68-检查是否含有B帧/转码推流/拉流显示/监控拉流推流/海康大华宇视监
    一、前言为什么需要判断视频文件是否含有B帧,这个在推流的时候很容易遇到这个问题,一般来说,没有B帧的视频文件,解码后的数据帧pts和dts都是顺序递增的,而有B帧的则未必,可能有些需要先解码后面显示,B帧也是双向预测图像B,对它的编码,即是对它前后帧的像素值之差进行编码,B帧是双向差别帧,也......
  • C++STL学习第一篇(什么是STL以及string的各种功能用法)
    STLSTL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器、空间配置器。数据结构和容器管理:STL提供了多种数据结构和容器,如向量(vector)、链表(list)、集合(set)、映射(map)等。这些容器可以帮助程序员方便地存储和管理数据,根据需求进行动态调......
  • 带析构语义的类的C++异常处理
    C++异常处理#include<iostream>#include<string>usingnamespacestd;classMyException{public:MyException(conststring&message):message(message){}~MyException(){}conststring&getMessage()const{returnmessage;}pr......
  • C++ LRU缓存
    题目://构建双向链表的节点结构(要有两个构造函数)structNode{intkey,val;Node*pre;Node*next;Node():key(0),val(0),pre(nullptr),next(nullptr){}Node(int_key,int_val):key(_key),val(_val),pre(nullptr),next(nullptr){}};class......
  • C++派生类构造函数
    实例#include<iostream>usingnamespacestd;classBase1{//基类Base1,构造函数有参数public:Base1(inti){cout<<"ConstructingBase1"<<i<<endl;}};classBase2{//基类Base2,构造函数有参数public:Base2(intj){cout<&l......
  • C++中的不规则二维数组
    技术背景最近刚学习C++的一些编程技巧,对于一些相对比较陌生的问题,只能采取一些简单粗暴的方案来实现。就比如说,我们可以在Python中定义一个[[0,0,0],[1,2],[1,1,1],[3]]这样的不规则的二维数组(list)。那么如果我们想在C++中实现一个类似的数据结构,应该怎么去设计呢?更具体一点的......
  • (持续更新)c++中的继承、封装、多态
    c++面向对象的三大特性为:继承、封装和多态c++认为万事万物都皆为对象,对象上有其属性和行为例如:人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌⋯车也可以作为对象,属性有轮胎、方向盘、车灯…行为有载人、放音乐、放空调…具有相同性......
  • 【c++八股】手撕单例模式
    懒汉模式classSingleton{public:staticSingleton&Instance(){if(instance_==nullptr)instance_=newSingleton();}returninstance_;}private:Singleton(){}~Singleton(){} //防拷贝 Singleton(c......