美文网首页
迭代器(iterators)概念与traits编程技法

迭代器(iterators)概念与traits编程技法

作者: 棉花糖7 | 来源:发表于2020-08-14 11:17 被阅读0次

3.迭代器(iterators)概念与traits编程技法

STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后在以一贴胶着剂将它们撮合在一起。

3.1 迭代器设计思维——STL关键所在

STL中心思想:将数据容器和算法分开,彼此独立设计,最后再以已贴粘着剂将他们撮合在一起

3.2 迭代器是一种smart pointer

迭代器是一种行为类似指针的对象,指针的最常见最重要的是内容提领(取出指标所指物体的内容dereference)和成员访问(member access)。所以,迭代器最重要的编程工作是对operator *和operator->进行重载(overloading)工作。

auto_ptr 是一个用来包装原生指针的对象,内存漏洞问题可以借此解决。用法如下,和原生指针一模一样。

3.3 迭代器相应类别(associated

types)

最常用的相应类别有五种

value type:迭代器所指对象的型别。

difference type :表示两个迭代器之间的距离,可用于表示容器的最大容量。

pointer type:代表迭代器所指对象的指针类型。简言之,operator->()的返回类型。

reference type:代表迭代器所指对象的引用类型。简言之,operator*()的返回类型。分为两种,不允许改变“所指对象之内容”者称为constant

iterators,例如const int* pic,允许改变“所指对象之内容”者称为 mutable iterators,例如 int* pi。*pic/*pi的型别constant T&/T&就是reference type。

iterator category type:提出5种迭代器的类型标识。

使用函数模板的参数推导机制

推导的是参数,无法推导函数的返回值类型

3.4 traits编程技法——STL源代码门钥

参数类别推导技巧虽然可以用于value type,但非全面可用:value type 用于函数的传回值

声明内嵌型别

关键词typename 的用意在于告诉编译器这是个型别

隐晦的陷阱:并不是所有的迭代器都是class type,如果不是class type 就无法为他定义内嵌类别

partial specialization(偏特化)的意义


Iterator category

Input Iterator:不允许外界改变。只读。

Output Iterator:唯写(write only)

Forward Iterator: 允许写入型算法(例如replace())在此种迭代器所形成的区间上进行读写操作。

Bidirectional Iterator:可双向移动。某些算法需要逆向走访某个迭代器区间(例如逆向拷贝某范围内的元素)

Random Access Iterator: 前四种迭代器都只供应一部分指针算术能力(前三种支持operator++,第四种再加上operator--),第五种则涵盖所有指针的算术能力,包括p+n,p-n,p1-p2,p1

注意:STL算法的一个命名规则:以算法所能接受的最低阶迭代器类型来为其迭代器型别参数命名

相关文章

  • 迭代器(iterators)概念与traits编程技法

    3.迭代器(iterators)概念与traits编程技法 STL的中心思想在于:将数据容器(containers...

  • 迭代器(Iterators)

    迭代器是一个能够循环访问,获取或删除元素的对象。 在通过迭代器访问集合之前,你必须先获得一个集合。每个集合类都提供...

  • 迭代器,生成器,装饰器

    迭代器 Python 迭代器(Iterators)对象在遵守迭代器协议时需要支持如下两种方法。iter(),返回迭...

  • stl迭代器

    (二)、迭代器1、迭代器Iterators,用来在一个对象群集(collection of objects)的元素...

  • STL——迭代器Traits

    Traits应用在很多地方,不仅仅有迭代器;还有: type traits iterator traits cha...

  • 1.5 Backtrader运行中的相关概念

    Line Iterators 策略和指标都是 line 迭代器:迭代 + 命名 method:next : 每次迭...

  • Python迭代器,生成器和装饰器

    Iterators 遵循迭代器协议,Python迭代器对象需要支持两种方法。 iter返回迭代器对象本身。这用于f...

  • Boolan C++ 笔记四

    泛型编程泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。STL以迭代器(Iterators)和容器...

  • 生成器(Generators)

    生成器(Generators) 首先要理解迭代器(iterators) 可迭代对象(Iterable):Pytho...

  • 5、数组方法

    建议使用高阶函数例如 map() 和 reduce() 替代 iterators(迭代器)

网友评论

      本文标题:迭代器(iterators)概念与traits编程技法

      本文链接:https://www.haomeiwen.com/subject/hnupdktx.html