栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

竞赛中比较趁手的C++里的函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

竞赛中比较趁手的C++里的函数

1.int型转换为string型 :

sprintf()

int num=456;
char a[5];
sprintf(a , "%d" , int num);
//将num转换成十进制然后逐位存入char型数组a中

%c 整数转成对应的 ASCII 字元
%d 整数转成十进位
%f 倍精确度数字转成浮点数
%o 整数转成八进位
%s 整数转成字符串
%x 整数转成小写十六进位
%X 整数转成大写十六进位

2.string型转换为int型 :

sscsnf()

char a[5] = "123";
int num;
sscanf(a , "%d" , &num);//将char型数组转换成十进制int型num
3.二分法查找:

这两个都必须将数组提前按照升序排好,当然降序也行,就是你把4看成大于2还是小于2的事了,说白了就是换个角度,下面的是按照升序来的

(lower_bound(a,a+n,int num)-a):在数组a中找到第一个大于等于num的数字并返回其下标

int a[6] = {1,2,3,4,5,6};
int num = 4;
cout << lower_bound(a,a+6,num)-a << endl;//输出3

(upper_bound(a,a+n,int num)-a):在数组a中找到第一个大于num的数字并返回其下标

int a[6] = {1,2,3,4,5,6};
int num = 4;
cout << upper_bound(a,a+6,num)-a << endl;//输出4

但这两个都是基于二分法查找的,要想准确,就要提前排序!!!

具体例子可以看看蓝桥杯2018年B组递增三元组这道题

4.返回string型输出从第几个到第几个字符

substr(a,b):返回下标从a到b的字符串

string s = "asdfg";
cout << s.substr(1,2) << endl;//此时会输出sd
5.排序:

sort(a, a+n,comepare):根据comepare确定数组a是升序还是降序,n是数组长度

bool comepare(int a,int b){
	return ab,就是降序了
}

int main()
{
    int num[] = {6,8,2,6};
    sort(num,num+4,comepare);
    //如果想要升序排列,可以不用谢comepare,因为升序是默认的

    for(int i=0;i 
6.得到数组中最大值和最小值: 

max_element(),min_element():
这两个函数用来快速得到数组中的最大/小值和最大/小值下标

其中num是定义的数组名,6是数组num的长度,例如:

int num[6]={1,0,5,2,5,0};
cout << *max_element(num,num+6) << endl;
//则此时输出的是num数组的最大值5
int num[6]={1,0,5,2,5,0};
cout << max_element(num,num+6)-num << endl;
//则此时输出的是num数组的最大值的下标2

(注意:无论是max_element()或是min_element(),若数组中最大值为多个相同值时,只按照最先出现的最大值来输出。eg:这里的最大值下标是2而不是4)

min_element()和max_element()的应用方法相同

7.去重函数:

unique(data,data+n):将date数组去重,n是数组长度

注意:unique只是能对相邻元素去重,例如:

int main()
{
    int date[6] = {2,3,3,6,2,5};
    int n = unique(date,date+6)-date;
     
    for(int i=0;i 

这样就只能将相邻的3去重,而不相邻的2就不能实现去重,所以用这个函数之前还需要使用sort()进行排序才行,更重要的是所谓的去重并没有将重复的内容删去,而是把他们都排在了最后面

8.最大公约数和最小公倍数:

__gcd:这个函数来求最小公倍数,调用一个万能头文件,可以直接用,但有些就用不了,如果用不了参考第二个代码段

//可以直接引用型:
int main()
{
    int gc = __gcd(4,8);
    cout << gc << endl;
    //输出最大公约数4
	return 0;
}
//不可以直接引用型:
int gcd(int a,int b){
    if(b==0) return a;
    else
        return gcd(b,a%b);
}

lcm:这个函数是需要自己定义的,来求最大公约数

int lcm(int a,int b){
	return a/__gcd(a,b)*b;
}
9.交换函数:

swap(a,b):就是将a和b进行交换,不用再有一个中间变量了
注意:a和b是必须是同一类型

#include
using namespace std;
int main(){
	int a=3,b=2;
	swap(a,b);
	cout << a  << "  " << b << endl;
	//输出结果为:2  3
	return 0;
}
10.排列组合

next_permutation(): 这是在STL中的

//int型数组:
#include
using namespace std;
int main(){
	int num[3] = {5,2,6};
	sort(num,num+3);
	//先使用sort排个序,不排也行,就是看着有点乱 
	do{
		for(int i=0;i<3;i++)
			cout << num[i] << "  ";
		cout << endl;
	}while(next_permutation(num,num+3)); 
}

//string型: 
#include
using namespace std;
int main(){
	string s;
	cin >> s ;
	sort(s.begin(),s.end());
	//先使用sort排个序,不排也行,就是看着有点乱 
	do{
		cout << s << endl;
	}while(next_permutation(s.begin(),s.end())); 
}
 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号