Accelerated C++:6 使用库算法

  • 许多的容器操作都可以应用到不止一种类型的容器中。对于每一种支持它们的类型,这些操作都有同样的接口。
  • 所有的容器都提供了配套的迭代器类型,通过容器并同时检查它的元素。
  • 库确保了所有提供统一操作的迭代器都通过同样的接口来实现其功能。

增量运算符的优先级与*相同,都是右结合的,则*iterator++的意义与*(iterator++)相同。

迭代器适配器

  • 迭代器是一种函数,会产生有着与其参数相关的属性的迭代器以做他用,迭代器适配器是在<iterator>中定义的。
  • 最常用的迭代器适配器是产生迭代器insert_iterators的适配器,使得关联的容器动态地增长。这样的迭代器能被安全地用作一个复制算法的目的地。
    • back_inserter(c)对容器c产生一个迭代器,在生成的迭代器被用作一个目的地的时候,它会向容器的末端添加数值。容器必须支持链表、向量以及字符串类型都支持的push_back操作。
    • front_insert(c)在容器头部插入元素。容器(链表)必须支持push_front操作。

存储类别说明符

static type variable:局部声明,被声明为static的局部变量具有全局寿命,生存期贯穿整个函数调用的过程。保证它的初始化工作在变量的第一次使用之前完成。

标准库算法

除非说明,否则一下的算法都在<algorithm>中定义。
accumulate(b, e, t)

  • <numeric>中声明,前两个参数指示一个区间,函数对区间中的值求和,函数的第三个参数所给定的值则是求和结果的开始。和的类型是第三个参数的类型。
  • 把区间[b,e)中的元素的总和加上t之后存储在t中。

find(b, e, t)

  • 没有调用谓词,查找由它的第三个参数给定的特定值,如果查找的值存在返回一个迭代器,指示给定的序列中第一次出现这个值的位置。如果找不到这个值,返回第二个参数。
  • 在序列[b,e)中查找特定值t

find_if(b, e, p);

  • 前两个参数指示一个序列的迭代器,第三个参数是一个谓词,检测自己的参数后返回truefalse,对序列中的每个元素都调用这个谓词,找到一个让谓词产生true值的元素的时候停止调用,并返回相应的位置的迭代器,全为false的返回第二个参数。
  • 根据谓词p来检查序列[b,e)的每一个元素。

search(b, e, b2, e2)

  • 两对迭代器参数:第一对指示要查找的序列,第二对指示要定位的序列,查找失败则返回第二个迭代器。
  • 在序列[b,e)中查找[b2, e2)

copy(b, e, out)

  • 采用了三个迭代器,把区间[b, e)中的所有元素复制到一连串从out开始的元素中,在必要时对out所属的容器进行拓展。
  • [b,e)所指示的序列复制到out指示的目的地中,复制整个序列

remove_copy(b, e, d, t)

  • 三个迭代器和一个数值,假定在目的地有足够的空间来保存所有被复制的元,删除每一个与特定值匹配的元素(即不复制它)
  • [b,e)所指示的序列中所有不等于t的元素,复制到d指示的目的地中。

remove_copy_if(b, e, d, p)

  • 使用一个谓词而不是一个值来检测,删除每一个满足谓词的元素(即不复制它),仅复制不满足谓词的元素。
  • [b,e)所指示的序列中所有使谓词p为假的元素,复制到d指示的目的地中。

remove_if(b, e, p)

  • 使用同一个序列作为源头与目的地, 排列容器使在区间[b,e)中使谓词p为假的元素位于这个区间的头部,返回一个迭代器,指示位于不被“删除”的元素之后的位置。

remove(b,e,t)

  • 使用同一个序列作为源头与目的地,查找与特定值匹配的所有值并移到尾部,输入系列中所有不被删除的值将被复制到目的地。
  • 作用与remove_if相同,检测不等于值t的元素。

transform(b,e,d,f)

  • 三个迭代器和一个函数,前两个迭代器指定待转换元素的区间;第三个迭代器是一个目的地,保存函数的运行结果;第四个参数是一个函数,transform将这个函数应用于输入序列的每个元素中以获得输出序列中的对应元素。
  • 把在区间[d,e)中的元素运行函数f,结果存储在d中。

equal(b,e,d)
比较两个序列并判断它们是否包含有相等的值,前两个参数指示一个序列的迭代器,第三个参数是第二个序列的起点。假定第二个序列的长度与第一个相同,不需要一个结尾迭代器。


partition(b,e,p) stable_partition(b,e,p)

  • 以谓词p为基础从而划分在域[b,e)中的元素以使那些使谓词为真(true)的元素处于容器的头部。返回一个迭代器,这个迭代器指示了第一个令谓词为假(false)的元素;如果对所有的元素谓词都是 true,那就返回estable_partiton 会让在每一个区域内的元素的输入顺序保持不变。

算法、容器以及迭代器

  • 算法作用于容器的元素——并不是作用于容器
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值