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;
}