【无标题】C++ STL(3)

迭代器适配器

reverse_iterator

  • 逆向迭代器取值,直接使用–正向迭代器的取值。 在这里插入图片描述

inserter

  • copy的动作是赋值,会修改原来的空间,通过inserter可以变成插入
  • inserter是一个辅助函数,在copy中,代码已经写死,使用*result = *first,于是标准库通过对inserter重载=,做到赋值变成insert
    在这里插入图片描述

ostream_iterator

  • 绑定一个输出流,
    在这里插入图片描述

istream_iterator

  • end-of-stream是cin结束后的东西,标兵
  • istream_iterator iit(std::cin);//等待输入一个double
    在这里插入图片描述
    在这里插入图片描述

万用的hash Function

  • c++提供一个万用的hash Function,以cusomerHash为例子

  • 在这里插入图片描述

  • 调用hash_val,可以传入任意type,任意数量的参数,调用1号hash_val,比如例子中传入3个参数,1号hash_val调用2号hash_val,z2号函数分解为seed,和1+2个参数,再调用自己直到只剩一个参数调用三号hash_val

  • 在这里插入图片描述

tuple

  • 可以用任意数量任意类型组成的类型
  • 通过make_tuple函数进行实参推导
  • tie(i,f,s) = t3//将t3的参数赋值到i,f,s
    在这里插入图片描述
  • tuple。通过不断继承来实现存放任意多个任意类型的参数
    在这里插入图片描述

type traits

  • traits是c++模板编程中使用的一种技术,主要功能: 
    
    把功能相同而参数不同的函数抽象出来,通过traits将不同的参数的相同属性提取出来,在函数中利用这些用traits提取的属性,使得函数对不同的参数表现一致
  • 各种各样的萃取器
    在这里插入图片描述
  • 实现type traits 的is_void
  • 首先去除const和volatile,通过一个特化和泛化来去除(1423-1447),
  • 然后通过一个泛化一个特化的is_void_helper,回答isvoid
    在这里插入图片描述

moveable class

  • 一个可以移动的类对于效率提升很大,需要让一个类接受右值引用参数的拷贝构造和拷贝赋值
  • 需要对象含有指针,普通版本的拷贝都需要重新new一个指针,复制指针指向的内容,而移动是直接让新对象的指针指向右值的指针指向地址
    在这里插入图片描述
    在这里插入图片描述
  • 测试函数是一个模板函数,但传入一个对象时,可以参数推导出类型,但是我们实际上传入的是一个容器,容器还是一个模板,当传入模板时,test_moving这个模板函数无法推导容器内的对象类型,就无法创建该类型对象,于是我们使用萃取器,传入vector的迭代器,获取类型
  • vector也有自己的移动拷贝,只需要拷贝vector的三个指针
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值