STL
头文件:#include “algorithm”
部分函数
排序:sort(start,end,cmp)
sort(start,end,cmp)可以对基本数据类型数组,结构体数组,动态数组(vector)等数组排序。start为数组的开始节点,end为结束节点(排序不包含end),cmp(函数)为比较方式,无则默认升序排列。
1、基本数据类型数组
bool cmp(int a,int b){ return a>b; }
int a[] = {1,2,3,8,6,4,9};
sort(a,a+7); //对a中前七个(不包括a+7)元素进行从小到大排列 1 2 3 4 6 8 9
sort(a,a+7,cmp) //从大到小排列 9 8 6 4 3 2 1
2、结构体数组
typedef struct Node{
int data;
}node;
node nodes[3]={{1},{3},{2}}
bool cmp1(node a, node b){return a.data<b.data; } //升序
bool cmp2(node a, node b){return a.data>b.data; } //降序
sort(a,a+3,cmp1); //1 2 3
sort(a,a+3,cmp2); //3 2 1
3、动态数组
bool cmp(int a,int b){ return a>b; }
int a[] = {1,2,3,6,5,4};
vector<int> v(a,a+6); //用数组a对v进行初赋值
sort(v.begin(),v.end());
for(int i=0;i<v.size();i++) //1 2 3 4 5 6
cout<<v[i];
sort(v.begin(),v.end(),cmp); //6 5 4 3 2 1
for(int i=0;i<v.size();i++)
cout<<v[i];
倒置:reverse(begin,end)
reverse(begin,end):对begin()到end()间(不包括end())元素倒置,可以对任意类型数组进行倒置(char[],string,int[],struct[],vector[])
1、String
string str = "abcd";
reverse(str.begin()+1,str.end());
2、char[]
char chr[] = "abcd";
reverse(chr,chr+4);
3、vector[]
char chr[] = "abcd";
vector<char> v(chr,chr+4);
reverse(v.begin(),v.end());
4、ElemType[]
ElemType array[]
reverse(v,v+n);
复制数组:copy(a.begin(),a.end(),b.begin())
copy(a.begin(),a.end(),b.begin()):把a中的从a.begin()到a.end()(不包括end())的元素复制到b中,从b.begin()的位置(包括它)开始复制,覆盖掉原有元素。注意其中数组b不能是一个定义后未分配空间的数组(即空数组),否则b.begin()地址未知。
int array[] = {1,1,2,2,3,4};
vector <int> a(array,array+6);
vector <int> b(n); //定义时分配适当空间大小n
copy(a.begin(),a.end(),b.begin());
查找元素:find(a.begin(),a.end(),10)
find(a.begin(),a.end(),10):在a中的从a.begin()到a.end()(不包括end())的元素中查找10,若存在返回对应迭代器,无则返回最后一个元素的后一个元素即a.end()。其中find函数中数组可以为任意类型数组。
int array[] = {1,2,3,4,5,6,7,8,9,10,11};
vector<int> a(array,array+11);
if(find(a.begin(), a.end(),10)!= a.end()){
cout<<find(a.begin(), ar1.end(),10)-a.begin()<<endl;
//结果迭代器-begin迭代器 = 结果索引
else
cout<<"NO"<<endl;