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;
}