c++primer学习笔记 初识泛型算法

1概述
大多数算法定义在头文件algorithm中。一般情况下,这些算法并不直接操作容器,而是遍历迭代器指定的元素范围。
2迭代器使算法不依赖于容器执行
虽然迭代器使用令算法不依赖于容器类型,但大多数算法都使用了一个(或者多个)元素类型上的操作。
关键在于:泛型算法本身不会执行容器操作,只会运行在迭代器之上,执行迭代器的操作。泛型算法运行于迭代器之上而不会执行容器操作的特性带来了一个令人惊讶但非常必要的编程假定:算法永远不会改变底层容器的大小。即算法可能会改变容器中保存的元素的值,也可能在容器中移动元素,但永远不会直接添加或删除元素。
3泛型算法的分类
1)只读算法
只读算法指只会读取其输入范围内的元素而不改变元素,如find就是这样的一种算法。对于只读算法,通常使用cbegin()和cend()类型的迭代器。
accmulate算法:三个参数,第三个参数作为求和的起点,这意味着序列中的元素类型必须和第三个参数匹配。
2)写容器元素的算法
写算法会将新值赋予序列中的元素。当我们使用这类算法时,必须注意确保序列原大小至少不小于我们要求算法写入的元素数目。
如fill算法:接收一对迭代器表示一个范围,还接收一个值作为第三个参数,将这个给定的值赋予输入序列的每个元素。
插入迭代器back_inserter: 插入迭代器是一种可以向容器中添加元素的迭代器。我们常常使用back_inserter来创建一个迭代器,作为算法的目的位置来使用。

vector<int> vec; //空向量
fill_n(back_inserter(vec),10,0);

拷贝算法:是向目的位置迭代器指向的输出序列中的元素写入数据的算法。该算法接收三个迭代器,前两个表示一个输入范围,第三个表示目的序列的起始位置。
此算法将输入范围中的元素拷贝到目的序列中,传递给copy的目的序列至少要包含和输入序列一样多的元素。
3)重排容器元素的算法
某些算法会重排容器中元素的顺序,一个明显的例子是sort。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值