您的位置:首页 > 编程语言 > C语言/C++

C++ Primer 5e chapter 10.1

2015-08-21 18:33 274 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: