c++中acm常用stl和function等

容器

注://符号表示不常用。
·	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










猜你喜欢

转载自blog.csdn.net/GreyBtfly/article/details/83107895
今日推荐