C++primer第4版第十一章泛型算法
来源:互联网 发布:极限编程特点 编辑:程序博客网 时间:2024/06/05 07:53
Talk is cheap, show me the code.
常用的在某容器或者内置数组中查找某个值,使用find标准库函数,必须先包含algorithm头文件,该文件还定义了find_if函数,支持找到满足自定义条件的元素第一次出现的位置:
vector<int> vect = {1, 2, 3};
vector<int>::iterator it = find(vect.begin(), vect.end(), 2);
cout << ( it == vect.end())?"not found":"exist!";int a[3] = {1, 2, 3};
int *p = find(a, a + 3, 2);
cout << (p == (a + 3))?"not found":"exist!";bool gt2(int a)
{
return (a >= 2);
}
vector<int> vect = {1, 2, 3};
cout << *find_if(vect.begin(), vect.end(), gt2) << endl; //找到第一个不小于2的元素位置的元素,结果为2标准算法库还提供在某容器或者内置数组中统计某成员出现的次数的函数count:
list<int> lst = {1, 2, 3, 2]
cout << count(lst.begin(), lst.end(), 2) << endl;对容器进行初始化,可以采用头文件algorithm中的fill或者fill_n,注意fill_n不检查是否超出了容器原有大小,所以需要配合使用头文件iterator中的back_inserter迭代器来完成赋值操作,back_inserter是允许创建元素的插入迭代器。
vector<int> vect(2);
fill(vect.begin(),vect.begin() + 5, 3); //right, 用3填充迭代器范围内现有的元素 ,超出范围的不创建新元素
vector<int> v1;
fill_n(back_inserter(v1), 10, 3); //right, 使用3填充指定个数的元素,这里是10个,没有的元素会进行创建
fill_n(v1.begin(), 10, 3); //wrong, 赋值失败,v1为空,没有的元素也不会创建,最终v1还是空对容器元素进行排序,可以使用头文件algorithm中的sort或者stable_sort,stable_sort对于相等的元素保持原来的排列顺序。两者都可以通过第三个参数指定排序方式,默认都是按元素类型 < 运算排序,前两个参数都是容器的前后迭代器。
bool isbigger(int a, int b)
{
return (a > b)?true:false;
}
int main()
{
vector<int> vect = {4, 4, 2, 1, 3, 3};
sort(vect.begin(), vect.end()); //结果为 1 2 3 3 4 4
sort(vect.begin(), vect.edn(), isbigger); //结果为4 4 3 3 2 1
stable_sort(vect.begin(), vect.end()); //结果为 1 2 3 3 4 4,其中3 和 4 相同元素都保持了原来的次序
stable_sort(vect.begin(), vect.end(), isbigger); //结果为 4 4 3 3 2 1,其中相同元素都保持了原来的次序
}对容器元素进行统计计数,可以使用头文件algorithm中的count或者count_if, count_if支持使用自定义的条件来统计满足条件的元素个数。
bool gt4(int a)
{
return (a >= 4);
}
vector<int> vect = {1, 3 ,4 ,3 ,4, 5};
cout << count(vect.begin(), vect.end(), 3); //统计vect中元素为3的个数,结果为 2
cout << count_if(vect.begin(), vect.end(), gt4); //统计vect中元素不小于4的个数,结果为3反向迭代器reverse_iterator包含在iterator头文件中,容器的rbegin()返回的迭代器指向容器的最后一个位置,rend()返回的迭代器指向容器的第一个元素的前一个元素位置,如果要将reverse_iterator转换为正序的iterator,只需要调用base()函数即可。
vector<int> vect = {1, 2, 3, 4};
for ( vector<int>::reverse_iterator rt = vect.rbegin(); rt != vect.end(); ++rt)
{
cout << *rt << " ";
}
cout << endl;
vector<int>::reverse_iterator rt = vect.rend();
cout << *rt.base() << endl;注意标准库algorithm中定义的sort等函数对于随机访问迭代器效率较高,但是对于list这种双向迭代器效率却比较低,对于list可以直接采用list自有的sort()函数来进行排序。
- C++primer第4版第十一章泛型算法
- c++primer第五版第十一章练习
- C++PRIMER第十一章练习
- C++Primer习题第十一章
- 记录——《C Primer Plus (第五版)》第十一章编程练习第5-12题
- C++ Primer 【第四版】第十一章 泛型算法
- C++ Primer 4 第十一章 泛型算法
- C.primer中文版第4版
- C++primer(第4版)书评
- C primer plus(第五版)编程练习第十一章
- C++primer第五版笔记-第十一章关联容器
- C++primer第五版第十一章学习笔记
- C++Primer Plus(第六版) 第十一章 第七题
- C ++ Primer Plus 第六版 第十一章编程练习答案
- 《C Primer Plus》第六版 第十一章编程练习
- C++Primer第5版读书笔记(第4章)
- C++primer第4版第1章知识点整理
- C++Primer学习笔记第十一章(11/18)泛型算法
- CSS中的margin塌陷(collapse)
- 文件上传
- 处理键盘事件 禁止后退键(Backspace)div或单行、多行文本框/div除外
- JSP中<base href="<%=basePath%>">的作用
- Android Studio 安装 新手 成功
- C++primer第4版第十一章泛型算法
- 【二】转载好与坏
- View的四个构造函数
- yum和apt-get的区别
- Spring(五)基于XML装配bean(作用域)
- docker在centos下卸载
- 使用 Python 如何生成 200 个激活码(或者优惠券)
- XML技术
- 素数的个数