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;
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;
相关文章推荐
- C/C++学习笔记--指针(Pointer)
- c++学习笔记(三)多态性
- iOS中OC字符串与C语言字符串之间的相互转换
- C++ Primer 5e chapter 9.2
- windows C++ 进入临界区 退出临界区
- C++ 编码转换
- 关于c++stl
- Item 4:确保变量的初始化 Effective C++笔记
- C语言回车符号和换行符
- hdu1160 FatMouse's Speed (dp,记录路径)
- 关于模版的实参推演
- C语言 字节对齐
- C++的引用语法
- C/C++易错难点笔记02
- C++ new 之 placement new、operator new、new operator
- c++ 四大函数练习
- (1.1.29)C++中定义类的对象:用new和不用new有何区别?
- C++静态成员函数小结
- 第一日学习(一)osgViewer/ViewerBase.cpp
- C++栈的实现