typedef input_iterator_tag iterator_category 这些都是什么意思?
std::input_iterator_tag, std::output_iterator_tag,std::forward_iterator_tag, std::bidirectional_iterator_tag,std::random_access_iterator_tag
在头文件 <iterator> 中定义
|
||
struct input_iterator_tag { };
|
||
struct output_iterator_tag { };
|
||
struct forward_iterator_tag : public input_iterator_tag { };
|
||
struct bidirectional_iterator_tag : public forward_iterator_tag { };
|
||
struct random_access_iterator_tag : public bidirectional_iterator_tag { };
|
||
定义迭代器的分类。这些标签都是空的类型,分别对应五种迭代器分类中的一种:
input_iterator_tag
对应InputIterator
.output_iterator_tag
对应OutputIterator
.forward_iterator_tag
对应ForwardIterator
.bidirectional_iterator_tag
对应BidirectionalIterator
.random_access_iterator_tag
对应RandomAccessIterator
.
顾名思义,迭代器分类标签可以用以标示某个迭代器的分类,可以根据这一分类所要求的特性来选择最优算法。
每一个迭代器类型都有对应的 std::iterator_traits<Iterator>::iterator_category 类型定义,即这五种类型之一。
#include <iostream>
#include <vector>
#include <list>
#include <iterator>template< class BDIter >
void alg(BDIter, BDIter, std::bidirectional_iterator_tag)
{std::cout << "alg() called for bidirectional iterator\n";
}template <class RAIter>
void alg(RAIter, RAIter, std::random_access_iterator_tag)
{std::cout << "alg() called for random-access iterator\n";
}template< class Iter >
void alg(Iter first, Iter last)
{alg(first, last,typename std::iterator_traits<Iter>::iterator_category());
}int main()
{std::vector<int> v;alg(v.begin(), v.end());std::list<int> l;alg(l.begin(), l.end());// std::istreambuf_iterator<char> i1(std::cin), i2;
// alg(i1, i2); // compile error: no matching function for call
}
typedef input_iterator_tag iterator_category 这些都是什么意思?相关推荐
- [转载]《STL源码剖析》阅读笔记之 迭代器及traits编程技法
本文从三方面总结迭代器 迭代器的思想 迭代器相应型别及traits思想 __type_traits思想 一 迭代器思想 迭代器的主要思想源于迭代器模式,其定义如下:提供一种方法,使之能够依 ...
- STL学习_配接器篇
STL学习_配接器篇 定义 配接器(Adapter)在STL组件的灵活组合运用功能上,扮演着轴承.转换器的角色.它事实上是一种设计模式.即将一个class的接口转换为另一个class的接口,使原本因接 ...
- stream iterators源代码详解
所谓stream iterators,可以将迭代器绑定到一个stream(数据流)对象身上.绑定istream对象(例如:std:cin),称为 istream_iterator,拥有输入能力.乍听之 ...
- 使用traits技术表现迭代器类型 iterator_category
1.STL的迭代器类型标识,和容器中的迭代器类型. 2.使用trait技术实现stl的advance功能. 3.迭代器trait中的其他类型定义. 1.STL的迭代器类型标识,和容器中的迭代器类型. ...
- C语言小知识:typedef\函数模板\
(1)typedef用法: typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等).在编程中使用t ...
- Typedef用法(转载)
在C的学习过程中,现在才发现,以前有那么多被忽略的重点:现在是慢慢拾起这些重点的时候,通过百度和博客,我感觉我学到了很多东西,自己只是在别人说的基础上,按照自己学习的过程在这里记录一下,以后有时间回过 ...
- C语言中的typedef
typedef 的讲解与应用实例 前言:我们学过C语言的人都应该听过,或者说学过,甚至说用过typedef,多多少少都对其有所了解.不过就算没听过也没关系,我们一起来探讨一下. 阐述:typedef ...
- typedef用法小结
Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...
- typedef与#define宏区别
先让我们了解一下typedef的功能,typedef简单来说就是给类型取一个别名: 如 typedef int New 那么int就有一个别名叫New了,以后size就和int这个类型一共用法了. ...
最新文章
- python使用joblib模块保存和加载机器学模型
- curl的速度为什么比file_get_contents快以及具体原因
- CentOS下软件的安装
- 利用cx_Freeze将py文件打包成exe文件(图文全解)
- 桥接模式、NAT模式、仅主机模式理解
- Shell 编程进阶笔记
- 学习进度条——第八周
- SAP Spartacus User form属性的运行时字段明细
- BugkuCTF-Crypto题MathEnglish
- idea背景颜色修改
- 曾经的荣誉,偶然被唤醒
- BlowFish算法Java实现
- 【CV/Matlab系列】基于图像处理的苹果质量检测和分级系统【含Matlab源码】
- Python:whl文件是神?如何安装whl文件?
- 【一句日历】2019年3月
- Spring Boot 3.0.0正式发布,Banner不再支持图片增强可观测性
- Windows系统下安装配置 MinGW-w64 开发环境
- 2021福建省安全员官方 判断题题库及答案
- 解决 报错ora-04098: oracle trigger 触发器无效且未通过重新验证
- 试题 E: 玩具蛇(C/C++)