容器
注://符号表示不常用。
· stringstream name(st) (sstream) 神一般的操作
将字符串st转化为输入流,可以用来name>>str.
· vector<int>name(n,v)
变量name是一个vector,每个元素为int,初始化为n个元素,值均为v.
+ 数据结构为最简单的一维数组。
+ 运算符:可以直接使用[]访问元素。
+ 构造函数:
可以不初始化
vector(n)
vector(n,v)
+ 方法:
empty()判断是否为空
//at() 返回指定位置的元素(直接[]就好了嘛)
size() 返回Vector元素数量
clear() 清空所有元素
erase() 删除指定元素
insert() 插入元素到Vector中
pop_back() 移除最后一个元素
push_back() 在Vector最后添加一个元素
//size_typezise()返回当前vector中的实际的元素个数
//size_typemax_size()返回标准库给vector允许分配的最大元素个数
//size_typecapacity()返回当前可容纳的vector元素的个数
//referencefront()返回当前vector首元素的引用,要求vector非空 eg.与front()的区别为const,我也不清
//referenceback()返回当前vector末尾元素的引用,要求vector非空 eg.与end()的区别为const,我也不清
·注:vector没有push_front()和pop_front()要在任意位置插入元素用insert(iterator pos,int a)在pos前插入a。
删除指定元素用erase(iteratorpos),删除指定区间的元素用
erase(iterator first,iterator last)删除[first,last)区间的元素。
Clear调用erase()删除[begin(),end())之间的所有元素,即清空vector
· set<string>name
变量name是一个类型为string的集合,即所有元素最多出现一次。且自动按<号排序
+ 数据结构为红黑树。以节点形式保存(动态),进行操作后原有的iterator指向的内容不变。
+ 运算符:不可以引用[]。需要用迭代器iterator访问。
+ 构造函数:
insert() ,插入一个值
begin() end() ,左闭右开,头尾iterator
clear() ,删除set容器中的所有的元素
empty() ,判断set容器是否为空
size() ,返回当前set容器中的元素个数
//max_size() ,返回set容器可能包含的元素最大个数
count() 用来查找set中某个某个键值出现的次数,键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了
//equal_range()
lower_bound(key_value) ,返回第一个大于等于key_value的定位器(iterator)
upper_bound(key_value),返回最后一个大于等于key_value的定位器(iterator)
· map<string,int>name
变量name是一个从string到int的一个映射。
+ 数据结构为红黑树。
+ 运算符:[]已被重载,可以用name["wbt"]=161082赋值(若"wbt"已经存在,则修改其值,不存在则insert)
+ 构造函数:
insert(pair<string,int>("aclive",102))插入一对值,跟[]不同的是,此处要涉及到集合中元素唯一性,即"aclive"存在时插入失败
跟set有点类似。
· queue<type>q; 申请一个type类型的队列
queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
· stack<type>
empty(判断是否为空)
size (返回栈的元素个数)
top(返回栈顶元素)
push_back (入栈)
pop_back (出栈)
· 优先队列
priority_queue<int> q;
· 双端队列
deque<ll>q;//定义一个双向队列q,类型为long long
q.push_front(a);//将a从队首插入队列
q.push_back(a);//将a从队尾插入队列
q.pop_front();//队首弹掉一个元素
q.pop_back();//队尾弹出一个元素
a=q.front();//返回队首元素
a=q.back();//返回队尾元素
a=q.size();//返回双向队列的大小
a=q.empty();//判断双向队列是否为空,为空返回1,不为空返回0
deque<ll>p(q);//将队列q复制一个新的队列p
q.clear(); //将队列q清空
函数
<algorithm>
· int a[n];
- int* lower_bound(a,a+n,x);
从数组a,查找n个元素(第a[n]不找)。二分查找第一个 >= x的位置,要求<号必须定义过,且a升序。
若数组全都小于x,则返回 地址a+n。
·- int* upper_bound(int* a,int* a+n,int x)
跟lower_bound类似,唯一区别就是 查找的是第一个 > x的位置
·- sort(a,a+n,cmp) 第三个参数可以省略,即升序。(我觉得也可以定义小于号)
cmp函数:
bool cmp(int a,int b)
{
return a<b; //从小到大
}
·- bool next_permutation(a,a+n)
求a地址开始n个元素的下一个全排列,其中123是第一个全排列,321是最后一个,若a中元素已经是最后一个321,
则结果是第一个全排列123并返回false,其余情况返回true。
a数组可以为char,也可以为int。
·- bool prev_permutation(a,a+n)
求上一个全排列 和next_permutation类似,
<stdlib.h> / <cstdlib>
·- qsort(array,n,sizeof(int),comp)
comp函数:
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;//从小到大
}
<string>
·- int string.find(char/string s1,int i) 查找s中第i个位置(包括i)第一次出现s1相对与string的位置(i到结尾),并返回(包括0)
- s.rfind(s1,i) (倒着查找,0到i的位置(i到结尾)(包括i),同上)
- s.replace(pos, n, s1) 用s1替换s中从pos开始(包括0)的共n个字符的子串,可与find搭配。
其它
其他函数——————————————————————————
<ctype.h>/<cctype>
· int(or bool) isalpha(char ch)
一种函数:判断字符ch是否为英文字母,若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0。
在标准c中相当于使用“ isupper( ch ) || islower( ch ) ”做测试,
· isupper/islower 此为宏定义,非真正函数。
· tolower(char ch)/toupper(char ch) 若ch为小写字母,则将ch转换为大写字母返回,若为大写字母或其他字符,直接返回ch
公式————————————————————————————
海伦公式:已知abc求三角形面积s
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
gcd:
int gcd(int a,int b)
{ int t;
if(a<b) return gcd(b,a);
while(b)
{
t=b;
b=a%b;
a=t;
}
return a;
}
union(并查集)
int find(int x)
{
if(pre[x]==x)
return x;
return pre[x]=find(pre[x]);
}
stl容器手册——————————————————————————
注://符号表示不常用。
· stringstream name(st) (sstream) 神一般的操作
将字符串st转化为输入流,可以用来name>>str.
· vector<int>name(n,v)
变量name是一个vector,每个元素为int,初始化为n个元素,值均为v.
+ 数据结构为最简单的一维数组。
+ 运算符:可以直接使用[]访问元素。
+ 构造函数:
可以不初始化
vector(n)
vector(n,v)
+ 方法:
empty()判断是否为空
//at() 返回指定位置的元素(直接[]就好了嘛)
size() 返回Vector元素数量
clear() 清空所有元素
erase() 删除指定元素
insert() 插入元素到Vector中
pop_back() 移除最后一个元素
push_back() 在Vector最后添加一个元素
begin(),end(),左闭右开,头尾iterator,有时可替代指针。eg.sort(v.begin(),v.end())
pop_back()出栈,用于从vector末尾删除元素与push_back()相反
//size_typezise()返回当前vector中的实际的元素个数
//size_typemax_size()返回标准库给vector允许分配的最大元素个数
//size_typecapacity()返回当前可容纳的vector元素的个数
//referencefront()返回当前vector首元素的引用,要求vector非空 eg.与front()的区别为const,我也不清
//referenceback()返回当前vector末尾元素的引用,要求vector非空 eg.与end()的区别为const,我也不清
·注:vector没有push_front()和pop_front()要在任意位置插入元素用insert(iterator pos,int a)在pos前插入a。
删除指定元素用erase(iteratorpos),删除指定区间的元素用
erase(iterator first,iterator last)删除[first,last)区间的元素。
Clear调用erase()删除[begin(),end())之间的所有元素,即清空vector
· set<string>name
变量name是一个类型为string的集合,即所有元素最多出现一次。且自动按<号排序
+ 数据结构为红黑树。以节点形式保存(动态),进行操作后原有的iterator指向的内容不变。
+ 运算符:不可以引用[]。需要用迭代器iterator访问。
+ 构造函数:
insert() ,插入一个值
begin() end() ,左闭右开,头尾iterator
clear() ,删除set容器中的所有的元素
empty() ,判断set容器是否为空
size() ,返回当前set容器中的元素个数
//max_size() ,返回set容器可能包含的元素最大个数
count() 用来查找set中某个某个键值出现的次数,键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了
//equal_range()
lower_bound(key_value) ,返回第一个大于等于key_value的定位器(iterator)
upper_bound(key_value),返回最后一个大于等于key_value的定位器(iterator)
· map<string,int>name
变量name是一个从string到int的一个映射。
+ 数据结构为红黑树。
+ 运算符:[]已被重载,可以用name["wbt"]=161082赋值(若"wbt"已经存在,则修改其值,不存在则insert)
+ 构造函数:
insert(pair<string,int>("aclive",102))插入一对值,跟[]不同的是,此处要涉及到集合中元素唯一性,即"aclive"存在时插入失败
跟set有点类似。
· queue<type>q; 申请一个type类型的队列
queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
· stack<type>
empty(判断是否为空)
size (返回栈的元素个数)
top(返回栈顶元素)
push_back (入栈)
pop_back (出栈)
stl函数手册——————————————————————
<algorithm>
· int a[n];
- int* lower_bound(a,a+n,x);
从数组a,查找n个元素(第a[n]不找)。二分查找第一个 小于等于 <= x的位置,要求<号必须定义过,且a升序。
若数组全都小于x,则返回 地址a+n。
·- int* upper_bound(int* a,int* a+n,int x)
跟lower_bound类似,唯一区别就是 查找的是第一个 小于 < x的位置
·- sort(a,a+n,cmp) 第三个参数可以省略,即升序。(我觉得也可以定义小于号)
cmp函数:
bool cmp(int a,int b)
{
return a<b; //从小到大
}
·- bool next_permutation(a,a+n)
求a地址开始n个元素的下一个全排列,其中123是第一个全排列,321是最后一个,若a中元素已经是最后一个321,
则结果是第一个全排列123并返回false,其余情况返回true。
a数组可以为char,也可以为int。
·- bool prev_permutation(a,a+n)
求上一个全排列 和next_permutation类似,
<stdlib.h> / <cstdlib>
·- qsort(array,n,sizeof(int),comp)
comp函数:
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;//从小到大
}
·- sort(front ,end,cmp)
front 和end为指针或迭代器,划定排序数组和区间[front,end),cmp可以缺省,表示排序比较函数,格式为:
bool cmp(node a,node b)//node为结构体/类
{
return a.x<b.x;//按照x成员从小到大排序。
}
<string>
·- int string.find(char/string s1,int i) 查找s中第i个位置(包括i)第一次出现s1相对与string的位置(i到结尾),并返回(包括0)
- s.rfind(s1,i) (倒着查找,0到i的位置(i到结尾)(包括i),同上)
- s.replace(pos, n, s1) 用s1替换s中从pos开始(包括0)的共n个字符的子串,可与find搭配。
<ctype.h>/<cctype>
· int(or bool) isalpha(char ch)
一种函数:判断字符ch是否为英文字母,若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0。
在标准c中相当于使用“ isupper( ch ) || islower( ch ) ”做测试,
· isupper/islower 此为宏定义,非真正函数。
· tolower(char ch)/toupper(char ch) 若ch为小写字母,则将ch转换为大写字母返回,若为大写字母或其他字符,直接返回ch