C++ Primer 5e chapter 10.1

本文详细介绍了C++标准库中的算法,包括find方法、排序算法等,并解释了如何使用泛型算法处理容器数据,还介绍了只读算法、写算法、重排算法的区别及应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、容器类并未提供很多操作,只是提供了简单的插入,删除等操作,但是标准库提供了一套泛型算法,使用迭代器作为接口,使得这些算法可以无差别应用于各类容器;

2、find方法,前两个参数为范围迭代器,第三个参数是待查找的值,成功则返回第一个等于给定值的迭代器,失败则返回第二个参数;一个问题是算法需要存储元素的某种操作,例如比较操作,但是算法同时提供了我们自己写函数来代替的接口,例如谓词函数;

3、算法永远不会改变容器,即添加或者删除元素;

4、算法大致分为三类,只读算法,写算法,重排算法;

5、只读算法,find,count,accumulate,equal;

6、写算法:fill,fill_n,注意写算法假定容器有足够大的空间可以写,程序员要自己保证这一点; copy算法,返回拷贝后下一位置的迭代器;replace算法,replace_copy算法;

7、为写算法产生的迭代器:插入迭代器,back_inserter

8、重排算法:sort,unique(排好序的容器,调用后把重复的都放在后面,返回最后一个不重复元素的迭代器),最后调用erase可以完成去重复过程;

9、定制一个操作:sort需要比较操作,可以把自己写的函数传递给算法,完成自己要的排序过程;

10、谓词:返回true或者false,一元谓词,二元谓词,根据输入参数不同而不同;

11、stable_sort稳定排序,维持了相等的元素的相对位置不变;

12、lambda表达式,算法只能接收一元或者二元谓词,如果我们需要更多参数,比如find_if(范围迭代器+一元谓词);

13、可调用对象:函数,函数指针,重载了调用运算符的类(仿函数),lambda表达式;

14、lambda表达式 : [捕获列表] (形参列表) -> 返回值类型 {函数体}  auto f = [] {return 42;};,可以忽略形参列表,可以忽略返回值类型,即void; 

15、[lambda所在位置的局部变量 sz] (const string &a) {return a.size >= sz;};注意局部的非静态变量需要捕获,静态变量可以直接使用;

16、for_each(范围迭代器,可调用对象,对每一个元素调用);

17、lambda可以捕获值,也可以捕获引用,比如iostream;

18、隐式捕获 [=],编译器决定捕获哪个变量;

19、当函数体包括return之外的语句时,需要指定返回值类型,否则编译器认为返回void;

20、bind函数适配器,可以改变函数的参数个数,重排参数顺序,p355;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值