C++ Primer 第十章 10.2 初识泛型算法 练习和总结

10.2 初识泛型算法

C++标准库提供的算法有100多个,一下子记不住这么多,我们可以辅助记忆。

大部分的算法接收两个参数表示可以操作的范围,这个范围叫做输入范围。
(其实我觉得也可以叫做迭代器范围)

泛型算法根据对元素的操纵方式分为
是否读取元素、改变元素、或是否重排元素。根据这些可以对算法进行大致划分。

10.2.1 只读算法

accumulate算法
accumulate(iter1,iter2,初始值)

该算法对输入范围内的元素进行累加操作,其中初始值类型和传入的容器元素类型可以不一致,只要容器中元素的类型可以转化为初始值类型也可以

这句话要记住,accumulate算法返回值类型以及在算法中使用的运算符都是使用初始值类型的。

vector<int> vec = {
   1,2,3,2134,3214,123,4,123,321,312,3,123,12,3,12,31,23,12};
	long value = 0;
	//元素类型和初始值类型是一样的,或者说元素类型可以转化为初始值类型
	//泛型算法返回值类型的是初始值类型且会调用初始值类型的运算符
	auto sum = std::accumulate(vec.begin(),vec.end(),value);

对于accumulate的操作,这里我的理解是元素类型先转化为初始值类型,再进行累加 ,即使用+运算符。

对于以下的代码:

vector<string> str_vec = {
   "123","321","233","xx","gg"};
auto str_sum = std::accumulate(str_vec.begin(), str_vec.end(),"");

先把string类型转化为const char* ,然后使用const char* 的+运算符。

但是const char* 没有+运算符,所以程序编译报错。

equal算法
equal(容器1输入范围1,容器1输入范围2,容器2输入范围1)

equal判断两个输入范围内的元素是否相等,因为传入的是迭代器,所以两个容器类型可以不一致,两个容器内的元素也可以不一致,只要可以执行==运算符即可

这类算法接收三个参数,前两个参数输入容器1的输入范围,后一个参数输入容器2的首元素。因为容器2只输入了首元素,所以这类算法都假定容器2中元素的个数大于等于容器1的元素个数

而另一些方法可以接收四个参数,这也可以输入两个完整的输入范围。

练习

10.3


vector<int> vec = {
   1,2,3,2134,3214,123,4,123,321,312
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值