标准模板库七):STL里面的算法介绍

1.partial_sum :创建一个新的元素序列,其中每个元素的值代表了范围内该位置之前所有元素之和。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i;
}
int main()
{
	int a[]={0,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	partial_sum(v1.begin(),v1.end(),v2.begin());
	return 0;

}
也可以自己定义操作来代替加:下面是前部分数据的连乘定义。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i;
}
int oo(int i,int j)
{
	return i*j;
}
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	partial_sum(v1.begin(),v1.end(),v2.begin(),oo);
	return 0;

}
2.partition :对范围内元素重新排序,使用输入的函数,把计算结果为 true 的元素都放在结果为 false 的元素之前。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	vector<int >::iterator ite=partition(v1.begin(),v1.end(),less5);
	for_each(v1.begin(),ite,pp);
	for_each(ite,v1.end(),pp);
	return 0;

}
3.remove :删除在范围内的所有等于指定的元素。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=remove(v1.begin(),v1.end(),4);//删除4
	
	return 0;

}
4.remove_copy 函数:将所有不匹配的元素都复制到一个指定容器,返回的 OutputIterator 指向被拷贝的末元素的下一个位置。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=remove_copy(v1.begin(),v1.end(),v2.begin(),4);//将v1移除4之后的序列复制到v2中
	
	return 0;

}
5.remove_if :删除所有范围内输入操作结果为 true 的元素。(remove_copy_if这个是上面两个函数的结合体,不在讲述)

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=remove_if(v1.begin(),v1.end(),less5);//并没有删除元素,要删除还得加erase
	//返回值是不满足条件的下一个位置
	return 0;

}
6.replace :将范围内的所有等于 old_value 的元素都用 new_value 替代。 replace_copy 函数:与 replace 类似,不过将结果写入另外一个容器。这样不会改变原来的列表, 新的列表一定要申请内存

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	replace(v1.begin(),v1.end(),4,10);//把区间内的4换成10
	
	return 0;

}
7.replace_if :将范围内的所有操作结果为 true 的元素用新值替代。 replace_copy_if :类似与 replace_if ,不过将结果写入另外一个容器。 
#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	replace_if(v1.begin(),v1.end(),less5,10);//把小于5的数换成10
	
	return 0;

}
8.reverse :将范围内元素重新按反序排列。 reverse_copy :类似与 reverse ,不过将结果写入另外一个容器。 

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	reverse(v1.begin(),v1.end());//并没有删除元素
	
	return 0;

}
9.rotate :将范围内的元素移到容器末尾,由 middle 指向的元素成为容器第一个元素。 rotate_copy :类似与 rotate ,不过将结果写入另外一个容器。

#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={0,2,9,5,3,7,8,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=rotate(v1.begin(),v1.begin()+4,v1.end());//返回值v1.begin()+4
	
	return 0;

}
10.search :给出了两个范围,返回一个 iterator ,指向在范围内第一次出现子序列的位置。
#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
int main()
{
	int a[]={1,2,9,4,10,8,3};
	int b[]={2,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=search(v1.begin(),v1.end(),v2.begin(),v2.end());
	
	return 0;

}

11.search_n :在范围内查找 value 出现 n 次的子序列。
#include <iostream>
#include<string>
#include <vector>
#include<algorithm>//算法
#include<numeric>
#include <functional>  //定义自己的模板类
using namespace std;
void pp(int i)
{
	cout<<i<<' ';
}
bool less5(int i)
{
	return (i<5);
}
int main()
{
	int a[]={1,2,9,4,4,4,10,8,3};
	int b[]={2,9};
	int len1=sizeof(a)/sizeof(a[0]);
	int len2=sizeof(b)/sizeof(b[0]);
	vector<int>v1(a,a+len1);
	vector<int>v2(b,b+len2);
	vector<int>v3(len1+len2);
	vector<int>::iterator ite=search_n(v1.begin(),v1.end(),3,4);
	
	return 0;

}













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值