C++语言STL库常用函数

目录

目录

万能头文件

include

1、memset()批量初始化函数

2、next/prev_permutation全排列函数

 3、unique去重函数

 4、reverse()函数

5、fill()函数

6、lower_bound(begin,end,num)函数

7、求绝对值,abs()和 fabs()函数

 8、求幂函数,pow和sqrt

9、swap(a,b)交换函数​​​​​​​


万能头文件

include<bits/stdc++.h>

1、memset()批量初始化函数

        1.原型:void *memset(集合,初始内容,大小)。

        2.初始化可以为两种内容:整型0和-1,字符ASCLL

        3.应用场景

                        * 需要数组初始值为0和-1。

                        * 需要字符串数组初始化多个相同的值。

                

初始化数组0和-1(只能这两个值)

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[10];
	int b[10];
	int c[10];
	memset(a,-1,sizeof(a));
	//-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	memset(b,0,sizeof(b));
	// 0 0 0 0 0 0 0 0 0 0
	memset(c,1,sizeof(c));//虽然不报错,但初始化的内容不是我们想要的内容 
	//16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 
	for(int i=0;i<10;i++)
	{
		printf("%d ",b[i]); 
	}
	return 0;
 } 

初始化为字符

#include<bits/stdc++.h>
using namespace std;
int main()
{

	char a[10];
	char b[10];
	memset(a,'a',sizeof(a));
	memset(b,'bbbbb',sizeof(b));//虽然给到多个字符,但不报错,且有效的也只有一个 
	for(int i=0;i<10;i++)
	{
		printf("%c ",a[i]); 
	}
	return 0;
 } 

2、next/prev_permutation全排列函数

        1.next_permutation(数组名,数组名+范围):将范围内的排序替换成更大的排序
        2.prev_permutation(数组名,数组名+范围) : 将范围内的排序替换成更小的排序

        3.返回值为bool型,如果在当前排序序列下能找到比当前更“大”的排序返回true
             如果到达最大排序,下一步重复时,返回false 

        4.应用场景:涉及到排列问题。

     

#include<iostream>
#include<algorithm>
using namespace std;
int a[3]={1,2,3};
//next_permutation(数组名,数组名+范围):将范围内的排序替换成更大的排序
//prev_permutation(数组名,数组名+范围) : 将范围内的排序替换成更小的排序
int main()
{
	//三位数,123,全排列顺序。 
	//1 2 3   1 3 2   2 1 3   2 3 1   3 1 2   3 2 1
	for(int i=0;i<12;i++)
	{
		printf("%d %d %d   ",a[0],a[1],a[2]);
		//如果能找到比当前更“大”的排序返回true
		//如果到达最大排序,下一步重复时,返回false 
		//prev_permutation同理,则相反。 
		if(!next_permutation(a,a+3))
		{
			printf("到达最大的排序!下步进行循环\n"); 
		};
	}
	return 0;	
 }

 3、unique去重函数

           1. 只能除去连续重复或者字符, 不能用于构造唯一性数组。
           2.原数组不会缩小,要求得有效数组段,进行输出 。

       例如:1,1,3,4,1,5,5,5 去重得到序列为:1,3,4,1,5(还有三位随机数,进行忽略)

           3.应用场景:需要去掉连续重复的数字或者字符的数组。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a[13]={10,10,10,4,2,4,3,3,4,1,1,4,1};
	char b[10] = {'a','a','b','c','v','a','a','b','c','v'};
	int n = unique(b,b+13)-b;//求得去重后,剩余的个数 
	//全部输出:
	for(int i=0;i<10;i++)
	cout<<b[i]<<" ";//结果为: 10 4 2 4 3 4 1 4 1 1 1 4 1
	cout<<endl;
	for(int i=0;i<10;i++)
	cout<<b[i]<<" ";//结果为: 10 4 2 4 3 4 1 4 1 1 1 4 1
	cout<<endl;
	//限定输出: 
	for(int i=0;i<n;i++)
	cout<<b[i]<<" ";//结果为: 10 4 2 4 3 4 1 4 1 ,,, a b c v a b c v
	
	//unique()方法使用总结:
		//1--只能除去连续重复的数, 不能用于构造唯一性数组
		//2--原数组不会缩小,要求得有效数组段,进行输出 
	return 0;
} 

 4、reverse()函数

reverse(it, it+a)可以将数组指针在[it, it+a)之间的元素或容器的迭代器在[it, it2)范围内的元素进行反转
a=需要反转数的个数
代码:

整型数反转:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[10]={0,1,2,3,4,5,6,7,8,9};
     reverse(a,a+10);
     for(int i=0;i<10;i++)
     printf("%d ",a[i]);
	return 0;
} 

 结果:

 字符串反转:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	char a[10]={"abcdefghi"};
     reverse(a,a+9);
     puts(a);
	return 0;
} 

结果:

5、fill()函数

fill(it,it+n,a)可以把数组容器中的某一段区间赋为某个相同的值。和memset不同,这里的赋值可以是数组类型对应范围中的任意值
n==赋值的个数

n==赋值的内容
代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[5]={1,5,6,7,3};
	char b[10];
    //字符型
	fill(b,b+10,'q'); 
    //整形
     fill(a,a+5,999);//将a[0]~a[4]赋值3为999 
     for(int i=0;i<5;i++)
     printf("%d ",a[i]);
     cout<<endl;
     cout<<b;
	return 0;
} 

结果:

注意: 

6、lower_bound(begin,end,num)函数

使用条件:排好序
从数组的begin位置到end-1位置二分查找第一个大于等于num的数组,找到返回该数组地址,不存在则返回end。通过返回的地址减去起始地址begin,得到数字在数组中的下标
代码:​​​​​​​

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int x;//下标
	int key; 
	int a[5]; 
	for(int i=0;i<5;i++)
	cin>>a[i];
	cin>>key;//需要查找的元素 
	sort(a,a+5);
	for(int i=0;i<5;i++)
	cout<<a[i]<<" ";
	cout<<endl;
     x=lower_bound(a,a+5,key)-a;//loower_bound返回的匹配数据的地址,通过减去数组名(首地址)得到下标大小 
     for(int i=0;i<5;i++)
     cout<<a[i]<<" ";
     cout<<endl;
     printf("%d ",x);
	return 0;
} 

结果:

7、求绝对值,abs()和 fabs()函数

abs()用于整型求绝对值,fabs()用于浮点型

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
	int a=-199;
	float b=-1.6;
	cout<<abs(a)<<" "<<fabs(a)<<endl;//测试结果为; 199 199,结论:整型用abs和fabs都可以 
	cout<<fabs(b)<<" "<<abs(b)<<endl;//测试结果为; 1.6 1 , 结论:浮点型用abs求绝对值会向下取整 
	return 0;
 } 

 结果:

 8、求幂函数,pow和sqrt

doule pow(base,exp):函数返回以参数baseexp 次幂。如果base为零或负和exp 小于等于零或非整数时,产生域错误。如果溢出,产生范围错误。

sqrt(base):函数返回参数num的平方根。如果num为负,产生域错误。

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
	cout<<pow(2,10)<<endl;
	cout<<sqrt(4)<<endl; 
	return 0;
 } 

结果:

9、swap(a,b)交换函数

swap()函数能将a,b两个参数的值交换(目前没有发现不能交换的类型)

#include<iostream>
#include<algorithm> 
using namespace std;
int main()
{
	int a=10,b=99;
	string st1 = "你好吗?";
	string st2 = "你他妈的!";
	swap(st1,st2);//string类型也可以 
	swap(a,b); 
	cout<<"a = "<<a<<"b=  "<<b;
	cout<<endl<<st1<<endl<<st2;
	return 0;
}

效果:

 

  • 13
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值