一些常用函数以及模板套用


sizeof()

返回某个变量的长度的。C语言C++都能用。

memset()

一般用这玩意清空数组。
比如说有一个int型数组a,要把它全部变成0:

memset(a,0,sizeof(a));

要写名为cstring或者string.h的头文件里。

strcmp()

按照ASCII码比较两个字符串。
strcmp(s1,s2);若s1、s2字符串相等,则返回零;若s1大于s2,则返回大于零的数;否则,则返回小于零的数。

要写名为cstring或者string.h的头文件里。

sort()

sort函数存在于C++标准库中,可以用于排序。听说比归并还要快,我没有测过,反正肯定比冒泡和选择快 。

用法:sort(数组开头,数组结尾);
例如,有个int数组a[n],那么对这n个数从小到大排序就是:sort(a,a+n);

如果想要在实现从大到小排序,那就在主函数前面加一段:

bool cmp(int a,int b){
	return a>b;
}

然后后面用到sort的时候就写成:sort(a,a+n,cmp);

若果是对是char数组按照ASCII码排序那就:

bool cmp(char a,char b){
	return strcmp(a,b)<0;
}

但是没办法对char型的二维数组排序。具体原因可以看这篇文章:1090.Phone List里面也有提到解决的办法。

对结构体数组排序也是一样。

举个例子:如果有n个同学(人数不超过100个),要求你按照这n个同学的数学成绩从高到低排序(成绩不超过int),如果成绩相同则按照他们的姓名的ASCII码从小到大排序(不超过10个字符且不会重复),最后输出排序结果。
代码如下:

#include<iostream>
#include<algorithm>//sort函数的头文件
#include<cstring>//strcmp函数的头文件
using namespace std;
struct student{//定义一个结构体数组放每个同学的姓名和成绩
	char name[15];
	int math;
}a[110];
bool cmp(student x,student y){
	if(x.math != y.math)
		return x.math > y.math;//如果成绩不一样就按照成绩从大到小返回
	else
		return strcmp(x.name,y.name)<0;//如果成绩一样就按照姓名从小到大返回
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>a[i].name>>a[i].math;//输入
	
	sort(a,a+n,cmp);//用sort排序就是这么简单!一句话就好了!
	
	for(int i=0;i<n;i++)
		cout<<a[i].name<<" "<<a[i].math<<endl;//输出
	
	return 0;
}

是不是超级好用!
如果那个太复杂,还是看不明白,那我再放一个简单的模板:

#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int x,int y){
	return x > y;
}

int main()
{
	int n;
	scanf("%d",&n);
	int a[n]; 
	for(int i=0;i<n;i++) scanf("%d",&a[i]);
	
	sort(a,a+n,cmp);//如果要从小到大就写sort(a,a+n);
	
	for(int i=0;i<n;i++) printf("%d ",a[i]);
	
	return 0;
}

set

set可以把它看成一个集合或是一个容器,我们往里面放进一些数字,它会自动去掉重复的并且按照从小到大排好序。
其实这个函数我也是这几天才了解到,如果哪个地方讲的不太对希望大佬们可以指出来。

set函数的一些用法:

begin(),返回容器的第一个元素
end(),返回容器的最后一个元素
erase(elem),删除容器中值为elem的元素
clear(),删除容器中所有所有元素
insert(elem) ,在容器中插入elem元素
empty() ,判断容器是否为空
max_size(),返回容器可能包含的元素最大个数
size(),返回当前容器中的元素个数

因为我目前对set还不太了解,对于迭代器等还不熟知,所以我先只放了一些用法以免混淆。
下面放一个可以用于去重的模板,可以直接套:

#include<cstdio>
#include<set>//set头文件别忘
using namespace std;
int main()
{
	set<int>a;
	int n,x;
	scanf("%d",&n);//输入n个数
	while(n--)
	{
		scanf("%d",&x);
		a.insert(x);//将每个输入的数插入容器
	}
	for(set<int>::iterator i=a.begin();i!=a.end();i++)
		printf("%d ",*i);//输出
	
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值