一,巡防算法
for_each(容器起始地址,容器结束地址,要执行的方法)
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
template<class T>
struct plus2
{
void operator()(T&x)const
{
x+=2;
}
};
void printElem(int& elem)
{
cout << elem << endl;
}
int main()
{
int ia[]={0,1,2,3,4,5,6};
for_each(ia,ia+7,printElem);//输出
int ib[]={7,8,9,10,11,12,13};
vector<int> iv(ib,ib+7);
for_each(iv.begin(),iv.end(),plus2<int>());//更改元素
for_each(iv.begin(),iv.end(),printElem);//输出
return 0;
}
二,find算法
int *find(int *begin,int *end,int value)
前闭后合的区间 begin,end中,查找value如果查找到了就返回第一个符合条件的元素,否则返回end指针
#include <iostream>
#include <algorithm>
using namespace std;
void printElem(int& elem)
{
cout << elem << endl;
}
int main()
{
int ia[]={0,1,2,3,4,5,6};
int *i= find(ia,ia+7,9);//在整个数组中查找元素 9
int *j= find(ia,ia+7,3);//在整个数组中查找元素 3
int *end=ia+7;//数组最后位置
if(i == end)
cout<<"没有找到元素 9"<<endl;
else
cout<<"找到元素9"<<endl;
if(j == end)
cout<<"没有找到元素 3"<<endl;
else
cout<<"找到元素"<<*j<<endl;
return 0;
}
三,数值算法
包含在<numeric>头文件中
#include <iostream>
#include <numeric> //数值算法
#include <vector>
#include <functional>
#include <iterator>
#include <math.h>
using namespace std;
int main()
{
int ia[]={1,2,3,4,5};
vector<int> iv(ia,ia+5);
cout<<accumulate(iv.begin(),iv.end(),0)<<endl; //累加 初值为0
cout<<accumulate(iv.begin(),iv.end(),0,minus<int>())<<endl; //累加 符号位负
cout<<inner_product(iv.begin(),iv.end(),iv.begin(),10)<<endl;//两个数组内积 初值为10
cout<<inner_product(iv.begin(),iv.end(),iv.begin(),10,minus<int>(),plus<int>())<<endl;//10-(1+1)-(2+2)
ostream_iterator<int> oite(cout," ");//迭代器绑定到cout上作为输出使用
partial_sum(iv.begin(),iv.end(),oite);//依次输出前n个数的和
cout<<endl;
partial_sum(iv.begin(),iv.end(),oite,minus<int>());//依次输出第一个数减去(除第一个数外到当前数的和)
cout<<endl;
adjacent_difference(iv.begin(),iv.end(),oite); //输出相邻元素差值 前面-后面
cout<<endl;
adjacent_difference(iv.begin(),iv.end(),oite,plus<int>()); //输出相邻元素差值 前面+后面 。前面更改影响后面元素
cout<<endl;
cout<<pow(10,3)<<endl; // 平方
/* VC 不支持 只有安装了才SGI STL支持
int n=3;
iota(iv.begin(),iv.end(),n);//在指定区间填入n n+1 n+2
for(int i=0;i<iv.size();++i)
cout<<iv[i]<<" ";
*/
return 0;
}
四,基本算法
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
template<typename T>
struct display
{
void operator()(const T &x)const
{
cout<<x<<" ";
}
};
int main()
{
int ia[]={0,1,2,3,4,5,6,7,8};
vector<int> iv1(ia,ia+5);
vector<int> iv2(ia,ia+9);
pair<vector<int>::iterator,vector<int>::iterator> pa;
pa=mismatch(iv1.begin(),iv1.end(),iv2.begin());
cout<<"两个数组不同点--第一个数组点:"<<*(pa.first)<<endl; //这样写很危险,应该判断是否到达end
cout<<"两个数组不同点--第二个数组点:"<<*(pa.second)<<endl;
//更改之后
if(pa.first == iv1.end())
cout<<"第一个数组与第二个数组匹配"<<endl;
cout<<equal(iv1.begin(),iv1.end(),iv2.begin())<&