c++ primer (第10章 泛型算法) 算法

2 篇文章 0 订阅
1 篇文章 0 订阅
#include<iostream>
#include<algorithm>
#include<iterator>
#include<vector>
#include<numeric>
#include<string>
#include<list>


using namespace std;
int main()
{
	vector<int> v1 = { 1, 3, 5, 7, 9, };
	vector<string> vs = { "aaa", "bbb", "ccc", "ddd", "eee" };

//只读算法,只读取而不改变元素的算法,通常最好使用cbegin(),cend()
//find算法,接受三个参数,返回值为迭代器,前两个参数为迭代器,第三个参数为要查找的值
//查找成功返回指向第一个等于给定元素的迭代器,查找失败返回第二个参数
	int  key = 11;
	auto iter = find(v1.cbegin(), v1.cend(), key);
	cout << (iter == v1.cend() ? "search failure\n" : "search sucessful\n");

	//find用于内置数组类型
	int a[] = { 4, 2, 3, 4, 5 };
	int *pt = find(begin(a), end(a), 7);        //begin和end函数使用c++11
    //int *pt = find(a, a+5, 7);			          与上一行功能相同,注意第二个参数为查找的下一个位置,即开区间,直至但不包括a[5]
	cout << (pt == end(a) ? "search failure\n" : "search sucessful\n");

//count算法,接受三个参数,返回给定值在序列中出现的次数
	key = 7;
	int ct = count(v1.cbegin(), v1.cend(), key);  
	cout << "ct: " << ct << endl;
	ct = count(begin(a), end(a), 4);             //count同样可用于内置数组类型
	cout << "ct: " << ct << endl;

//accumulate算法,接受三个(可以四个)参数,前两个参数指定求值范围,第三个参数是和的初值,返回求和结果,算法头文件为numeric
	string s1 = "";
	string sum = accumulate(vs.cbegin(), vs.cend(), s1);
	//string sum = accumulate(vs.begin(), vs.end(), "   "); 如此无法通过编译,原因为const char* 类型上没有定义+运算符

	int sum1 = accumulate(v1.cbegin(), v1.cend(), 0);
	cout << "sum: " << sum << endl;
	cout << "sum1: " << sum1 << endl;

//操作两个序列的算法
//equal算法,接受三个迭代器做参数,前两个表示第一个序列的元素范围,第三个参数表示第二个序列的首元素
//根据判断两序列中所有元素是否相等(本质是判断第一个序列是否是第二个序列的子集)返回bool值
//equal算法可以用来比较不同类型容器和不同类型元素的值,如vector<int>={1,2,3},list<double>{1,2,3},equal返回真
//注意,对于只接受一个单一迭代器表示第二个序列的算法,都假定第二个序列长度大于等于第一个序列
	vector<int> v2 = { 1, 3, 5, };
	list<double> v3 = { 1.0, 3.0, 5.0, 7.0, 10.0 };
	bool e = equal(v2.begin(), v2.end(), v3.begin());
	cout << (e == 1 ? "equal" : "not euqal");
	cout << endl;

//写容器元素算法
//fill算法接受一对迭代器表示一个范围,第三个参数为一个值,fill将给定的这个值赋予输入序列中的每个元素
	vector<int> v4 = { 1, 3, 5, 7, 9, 11 };
	fill(v4.begin(), v4.end(), 0);           //元素全部置0
	copy(v4.cbegin(), v4.cend(), ostream_iterator<int>(cout, " "));
	cout << endl;

//fill_n算法接受一个单迭代器、一个计数值、和一个值,它将给定值赋予迭代器指向的元素开始的制定个元素
//注意,fill_n假定写入制定个元素是安全的
	vector<int> v5 = { 1, 3, 5, 7, 9, 11 };
	fill_n(v5.begin(),v5.size()/2,0);       //将v5前半部分置0
	copy(v5.cbegin(), v5.cend(), ostream_iterator<int>(cout, " ")); cout << endl;
	//fill_n(v5.begin(), 10, 0);            //第二个参数超出容器容量,将引发不可预计的后果
	//安全做法,使用插入迭代器back_inserter,以下代码完成在v5尾部插入3个0
	//使用一个普通迭代器向容器元素赋值时,值被赋予迭代器指向的元素。而通过一个插入迭代器赋值时,将把一个新元素添加至容器中
	fill_n(back_inserter(v5), 3, 0);       
	copy(v5.cbegin(), v5.cend(), ostream_iterator<int>(cout, " ")); cout << endl;

//copy算法 ,前两个参数为被拷贝对象的范围,第三个参数表示目的序列的起始位置,函数返回拷贝后目的容器的尾后位置
	int a1[] = { 1, 2, 3, 4, 5 };
	int a2[sizeof(a1) / sizeof(*a1)];  //使a2与a1等长
	copy(begin(a1), end(a1), a2);      //a1拷贝至a2
	copy(begin(a2), end(a2), ostream_iterator<int>(cout, " ")); cout << endl;

	vector<int> v6 = { 1, 3, 5, 7, 9, 11 };
	vector<int> v7 = { 1, 2, 3, 4, 5, 6, };
	copy(v6.begin(), v6.end(), v7.begin());      
	copy(v7.cbegin(), v7.cend(), ostream_iterator<int>(cout, " ")); cout << endl;

//replace算法,读入一个序列并将所有等于给定值的元素都改为另一个值
	vector<int> v8 = { 1, 2, 3, 3, 3, 4 };
	replace(v8.begin(), v8.end(), 3, 7);        //将容器中所有3改为7
	copy(v8.cbegin(), v8.cend(), ostream_iterator<int>(cout, " ")); cout << endl;

//replace_copy算法,相比replace多接受1个参数,不改变原序列的值,将替换体现在新序列上
	vector<int> v9 = { 1, 2, 3, 3, 3, 4 };
	vector<int> v10 = { 10, 20, 30, 30, 30, 40 };
	replace_copy(v8.begin(), v8.end(),v10.begin(), 3, 7);        //将v9中所有3改为7并拷贝至v10,v9本身不变
	copy(v10.cbegin(), v10.cend(), ostream_iterator<int>(cout, " ")); cout << endl;
//unique算法,接受一对迭代器范围,返回一个指向不重复值范围末尾的迭代器
	vector<int> v11 = { 1, 2, 3, 3, 3, 4 };
	auto endv11=unique(v11.begin(), v11.end());
	v11.erase(endv11, v11.end());             //将删除后空出的位置上的元素删除
	copy(v11.cbegin(), v11.cend(), ostream_iterator<int>(cout, " ")); cout << endl;


	system("pause");
	return 1;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面中可以对界面中显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面中查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
基于hal库的OLED显示屏驱动C语言实现源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值