24 迭代器分类对算法的影响(学自Boolean)
来源:互联网 发布:js 屏蔽运营商广告 编辑:程序博客网 时间:2024/06/05 05:39
1、概述
STL中的算法是独立于容器的,但是它可以通过迭代器iterators对容器进行操作,当容器的迭代器能回答算法的提问时,该容器才能搭配算法的所有操作。而从语言层面上说,算法Algorithm,是一个函数模板function template。
2、G2.9迭代器的分类
1)迭代器的分类有5种
- input_iterator_tag
- farward_iterator_tag
- bidirectional_iterator_tag
- random_access_iterator_tag
- output_iterator_tag
解析:
a、random_access_tag是代表迭代器可以跳转,如ite+=5。一般是用于序列式容器如:array、vector、deque;
b、bidirectional_iterator_tag是代表迭代器是双向链表类型,如list、rb_tree、set、map;
c、farward_iterator_tag是代表迭代器是单向链表类型,如farward_list、hashtable、unordered_set、unordered_map;
d、input_iterator_tag代表是istream_iterator类型;
e、output_iterator_tag代表是ostream_iterator类型;
2)它们之间的关系如下,除了output_iterator_tag外,其它是继承关系
3、不同容器的迭代器分类验证
1)STL中容器包括序列式容器和关联式容器中的迭代器分类验证如下
解析:图1中列举了不同类型的容器,然后使用函数传入参数迭代器对象,然后会输出相应迭代器分类。图2就是打印输出的迭代器分类名称,与图1一一对应。我们可以
知道不同类型容器中的迭代器分类。当然也可以通过typeid()函数进行验证,如下:
vector<int> v;cout << typeid(v.begin()).name() << endl;
2)了解istream_iterator的迭代器分类
解析:通过G2.9中对istream_iterator的typedef定义可以,它的迭代器类型是input_iterator_tag。同理ostream_iterator中的是output_iterator_tag类型。
3、迭代器类型对算法的影响
下面将举例说明不同迭代器类型是如何影响算法的。
1)算法distance的结构
解析:
a、STL中算法distance功能是求得两个迭代器间的距离。通过传入参数两个需要计算距离的迭代器;
b、当对不同的容器使用distance算法的时候,diatance()函数会根据迭代器的类型category来调用不同的_distance()函数,正是此处发挥了迭代器分类对算法影响的
功能。
2)调用函数_distance()的不同重载函数
解析:
a、_distance有两个重载函数,分别对应传入迭代器类型是input_iterator_tag和random_access_iterator_tag;
b、当传入容器迭代器是random_access_iterator_tag时,如array容器,直接进行last-first操作就能完成求距离的功能;
c、当传入容器不是random_access_iterator_tag时,求距离时要进行分布迭加,这样效率就会慢很多;
d、这边只重载了两种迭代器类型,因为迭代器分类是继承结构,而input_iterator_tag是最高父类,所以传入的不同迭代器类型都能调用它。
4、算法源码中对iterator_category的暗示
解析:
a、在算法中函数参数传入类型是模板类型,但是会用名称提示你,对于所要求的迭代器的分类类型,如distance需要InputIterator。
b、如果你传入不同类型的迭代器,声明不会报错。但在使用过程中会出现错误。
阅读全文
0 0
- 24 迭代器分类对算法的影响(学自Boolean)
- 32 moveable元素对于容器速度的影响(学自Boolean)
- 19 迭代器iterator的设计原则(学自Boolean)
- 28 迭代器适配器(学自Boolean)
- 09 C++Reference引用的用法(学自Boolean)
- 20 容器vector的深度探索(学自Boolean)
- 27 新型适配器bind的使用方法(学自Boolean)
- 26 函数适配器binder2nd(学自Boolean)
- 30 hash function(学自Boolean)
- 03 C++中复合、委托和继承的基本用法(学自Boolean)
- 04 C++中转换函数(Conversion Function)的用法(学自Boolean)
- 17 分配器Allocator和容器间的关系(学自Boolean)
- HTML大纲算法对结构的影响
- 训练数据对分类器性能的影响
- 先随机化数据对分类效果的影响
- 训练数据对分类器性能的影响
- 关于sql_mode对自增的一个影响
- 10 C++中的对象模型object model(学自Boolean)
- 程序员面试宝典随笔记(一)--多态性
- 696. Count Binary Substrings
- Prim(各种功能)
- 数据结构实验之查找三:树的种类统计
- 数据结构2
- 24 迭代器分类对算法的影响(学自Boolean)
- MySQL数据库——创建计算字段
- 【TensorFlow】MNIST(代码重构+模型持久化)
- 程序员面试宝典随笔记(一)--动态和静态绑定
- Oracle Profile 使用详解
- Bag of visual words(Bag of Words(BOW)模型)
- python 语言特性-异常总结(思维导图)
- hdu 1010 dfs(奇偶剪枝)
- 自己关于一些selvert的笔记