STL中有很多可以直接使用的算法,例如在<numeric>和<algorithm>等头文件中定义了许多方法,这些方法只需要算法设计的过程中加入相应的头文件即可使用,下面介绍一些常用的算法。
Sort排序,实际上是快速排序,可以对vector、string、数组等进行排序,缺省情况下sort是升序排列。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(-1);
v.push_back(8);
sort(v.begin(),v.end());
for(int i=0; i<v.size(); i++)
cout<<v[i]<<' ';
cout<<endl;
return 0;
}
输出结果:-1 1 3 8
sortt默认是升序排列,若要降序排列,自定义比较函数即可:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//自定义比较函数
bool comp(int a,int b)
{
if(a!=b)
return a>b;
else
return b<a;
}
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(-1);
v.push_back(8);
v.push_back(22);
sort(v.begin(),v.end(),comp);
for(int i=0; i<v.size(); i++)
cout<<v[i]<<' ';
cout<<endl;
return 0;
}
输出结果:22 8 3 1 -1
Sor对数组排序和String类型同样可以排序:
对数组排序:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[5]= {1,5,2,-1,4};
sort(a,a+5);
for(int i=0; i<5; i++)
cout<<a[i]<<' ';
cout<<endl;
return 0;
}
输出结果:-1 1 2 4 5
对String类型排序:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s="asgfhyh1";
sort(s.begin(),s.end());
cout<<s<<endl;
return 0;
}
输出结果:1afghhsy,输出结果按照ASCII顺序排列。
stable_sort(first,last)归并排序,默认也是升序:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(-1);
v.push_back(8);
stable_sort(v.begin(),v.end());
for(int i=0; i<v.size(); i++)
cout<<v[i]<<' ';
cout<<endl;
return 0;
}
输出结果:-1 1 3 8
min_element(first,last)寻找范围内最小值,返回迭代器:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v;
vector<int> ::iterator pos;
v.push_back(1);
v.push_back(3);
v.push_back(-8);
v.push_back(8);
pos=min_element(v.begin(),v.end());
cout<<*pos<<endl;
return 0;
}
输出结果:-8
max_element(first,last)寻找范围内最大值,返回迭代器:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v;
vector<int> ::iterator pos;
v.push_back(1);
v.push_back(3);
v.push_back(-8);
v.push_back(8);
pos=max_element(v.begin(),v.end());
cout<<*pos<<endl;
return 0;
}
输出结果:8
Copy(first,last,result):将first到last区间的元素复制到result中:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int myints[]= {10,20,30,40,50,60,70};
vector<int> myvector;
vector<int>::iterator it;
myvector.resize(7);
copy ( myints, myints+7, myvector.begin() );
for(int i=0; i<myvector.size(); i++)
cout<<myvector[i]<<" ";
cout<<endl;
return 0;
}
Copy()函数字符串数组同样是适用:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
char s[24]="123456789";
char s1[24]="";
copy(s,s+5,s1);
cout<<s1<<endl;
return 0;
}
Remove(first,last,value):将区间first到last区间中值为value的元素删除
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int num[]= {1,2,3,4,5,1,0};
int *pbegin=num;
int *pend=num+sizeof(num)/sizeof(int);
pend=remove(pbegin,pend,1);
for(int *p=pbegin; p!=pend; p++)
cout<<*p<<" ";
cout<<endl;
return 0;
}
Fill(first,last,value):将区间first到last区间全部初始为value
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v(8);
fill(v.begin(),v.end(),1);
for(int i=0; i<v.size(); i++)
cout<<v[i]<<" ";
cout<<endl;
return 0;
}
Find(first,last,value):查找first到last区间第一个值为value元素的位置,返回一个迭代器
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int num[]= {1,2,3,4,5};
int *p;
p=find(num,num+5,3);
if(p==num+5)
cout<<"Not found!"<<endl;
else
cout<<*p<<endl;
return 0;
}
itoa 为c语言的一个函数,它不是标准定义下的C语言,itoa取整数输入值,并将其转换为相应进制数字的字符串
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i=1750;
char buffer [33];
itoa (i,buffer,10);
printf ("decimal: %s\n",buffer);
itoa (i,buffer,16);
printf ("hexadecimal: %s\n",buffer);
itoa (i,buffer,2);
printf ("binary: %s\n",buffer);
return 0;
}
atoi把字符串转换成整型数的一个函数
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int data;
data=atoi("123");
printf("%d\n",data);
return 0;
}
更多函数的使用和说明,可以查看C/C++的帮助手册。