常用stl(c++)
众所周知,c++的模板库是相当强大的。
下面我来列举一些常用的,(神奇的)
//部分材料选自《算法竞赛入门经典(第2版)》(刘汝佳)
一,algorithm (算法)
min(a,b)-----------取最小值
max(a,b)-----------取最大值
//当然在实际应用当中可能无法直接使用,这时候我们需要自己编写函数
例:
#include<iostream> #include<cstdio> using namespace std; struct node { int x,y; } e[1001]; int max(int z1,int z2) { if(e[z1].x==e[z2].x) { if(e[z1].y>=e[z2].y)return z1; else return z2; } else if(e[z1].x>e[z2].x)return z1; else return z2; /*----------------- 以x为第一关键字,y为第二关键字,比叫结构体e[z1],e[z2]. -------------------*/ } int main() { cin>>e[1].x>>e[1].y; cin>>e[2].x>>e[2].y; cout<<max(1,2); return 0; }
sort(int first,int last,int cmp)----------将[first,last)这样一个左闭右开的区间进行排序(默认从小到大)
运用自定义的cmp函数,可以将它的排序自定义
例:
int cmp(node x,node y) { return x.a==y.a?x.b<y.b:x.a<y.a; }
全例:
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int cmp(int a,int b) { return a<b; /*-------------- 若a<b,表示从小到大排序 若a>b,表示从大到小排序*/ } int a[1001]; int n; int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n,cmp); /*---------- 表示排序a[0-(n-1)]这些数 正好与我们的存储方式相同*/ for(int i=0;i<n;i++) cout<<a[i]; return 0; }
lower_bound(first,last,element)--------查找第一个大于等于element的数所在的位置
upper_bound(first,last,element)-------查找第一个大于element的数所在的位置
int p2=lower_bound(a,a+8,2)-a; /*因为指针是有增减性的, 而它这里返回的是位置, 减去a这个数组所在的位置 ,就是这个数在数组里的位置 */ cout<<a[p2];
前提:必须是有序区间
//借图于流沙-岁月的博客
这是查找顺序
补充一点内容:迭代器(iterator)
度娘翻译:迭代器(iterator)有时又称游标(cursor),是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器物件的内容。它可以把抽象容器和通用算法有机的统一起来。
看不懂对不对?我也不懂。
简单来说,就是指向STL里容器的一个指针,返回其位置
定义:vector<int> ::inerator p;(红色为必写内容)
基本用法和指针一样,记录位置。
'*'取该位置的值,'&'取这个位置
vector<int> ::inerator p; p="位置"; p=*"位置";
大概就是这样。
这样我们STL的两大内容就都说完了,关于容器,我们下次在说
byebye!(o゜▽゜)o☆[BINGO!]