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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值