四舍五入
cin>>m;
(int)(m/(1.0*10)+0.5);//对于除以多少是根据题意来的
#include<iomanip> cout<<fixed<<setprecision(1)<< 需要的地方; 这里为自动的四舍五入,保留一位小数
基本函数
max();最大值
min();最小值
abs();绝对值
floor();求不足整数值
ceil();求进位整数值
eof(文件变量)或eof:判定文件结束
isdigit(c);在头文件stdlib.h中,用于判断c是否为0~9间的字符
atof(str);str为一个字符串数组,用于把字符串转换为浮点数
atoi(str);str为一个字符串数组,用于把字符串转换为整型
char [1005][10]:代表共有1005个字符串,且每个字符串的长度为10.
for(int i=1;i<=n;i++)
{
if(strcmp(s[i],"mumble")!=0&&atoi(s[i])!=i)
{
cout<<"something is fishy"<<endl;
return 0;
}
}
itoa():将整型值转换为字符串
unique()://unique是 c++标准模板库STL中十分实用的函数之一,使用此函数需要,(1) 这里的去除并非真正意义的erase,而是将重复的元素放到容器的末尾,返回值是去重之后的尾地址。
//(2) unique针对的是相邻元素,所以对于顺序顺序错乱的数组成员,或者容器成员,需要先进行排序,可以调用std::sort()函数
algorithm头文件下的常用函数
1、max(x,y)和min(x,y)分别返回x和y中的最大值和最小值,且参数必须是两个(可以是浮点数)。如果想要返回三个数x,y,z的最大值,可以使用max(x,max(y,z))的写法。
2、abs(x) 返回x的绝对值。注意:x必须是整数,浮点型的绝对值用math头文件下的fabs
3、swap(x,y)用来交换x和y的值
4、reverse(it,it2)可以将数组指针在[it,it2)之间的元素或容器的迭代器在[it,it2)范围内的元素进行反转
例如:reverse(a,a+4);//将a[0]~a[3]反转 string str="abcdefghi"; reverse(str.begin()+2,str.begin()+6);//对str[2]~str[5]反转
5、next_permutation() 给出一个序列在全排列的下一个序列
例如,n=3的全排列为 123 132 213 231 312 321 这样231的下一个序列就是312
#include <stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={1,2,3};
//a[0]到a[2]之间的序列需要求解next_premutation
do{
printf("%d%d%d\n",a[0],a[1],a[2]);
}while(next_permutation(a,a+3));
return 0;
}
6、fill() 可以把数组或容器中的某一段区间赋为某个相同的值,和memset不同,这里的赋值可以是数组类型对应范围中的任意值
7、sort() 用来排序的函数
(1)方法:#include<algorithm> using namespace std;
sort(首元素地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填));如果不填比较函数,则默认对前面给出的区间进行递增排序
(2)如何实现比较函数cmp
1》基本数据类型数组的排序:①如果比较函数不填,则默认从小到大的顺序排序
②如果想要从大到小来排序,则要用cmp函数来“告诉”sort何时要交换元素
#include <stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;//可以理解成当a>b时把a放在b前面
}
int main()
{
int a[]={3,1,4,2};
sort(a,a+4,cmp);
for(int i=0;i<4;i++)
{
printf("%d ",a[i]);//打印4 3 2 1
}
return 0;
}
记忆方法:如果要把数据从小到大排列,那么就用“<”,因为“a<b”就是左小右大;
如果要把数据从大到小排列,那么就用“>”,因为“a>b”就是左大右小
②结构体数组的排序
定义了如下的结构体
struct node
{
int x,y;
}ssd[10];
如果想将ssd数组是先按照x从大到小排序,但当x相等的情况下,按照y的大小从小到大来排序,则这样写cmp函数
bool cmp(node a ,node b)
{
if(a.x!=b.x)
return a.x>b.x;
else
return a.y<b.y;
}
③容器的排序
在STL标准容器中,只有vector, string, deque是可以使用sort的。
8、lower_bound()和upper_bound()
lower_bound(first,last,val)用来寻找在数组或容器的[first,last)范围内第一个值大于等于val的元素的位置。如果是数组,则返回该 位置的指针,如果是容器,则返回该位置的迭代器。
upper_bound(first,last,val)用来寻找在数组或容器的[first,last)范围内第一个值大于val的元素的位置。如果是数组,则返回该 位置的指针,如果是容器,则返回该位置的迭代器。
如果数组或容器中没有需要寻找的元素,则这两个函数均返回可以插入该元素的位置的指针或迭代器(即假设存在该元素时,该元素应当在的位置)。时间复杂度均为O(log(last-first))
int a[10]={1,2,2,3,3,3,5,5,5,5};//注意数组坐标从0开始
//寻找-1
int* lowerPos=lower_bound(a,a+10,-1);
int* upperPos=upper_bound(a,a+10,-1);
cout<<lowerPos-a<<" "<<upperPos-a<<endl;//0 0
//寻找1
int* lowerPos=lower_bound(a,a+10,1);
int* upperPos=upper_bound(a,a+10,1);
cout<<lowerPos-a<<" "<<upperPos-a<<endl;//0 1
如果只是想获得欲查元素的下标,就可以不使用临时指针,而直接令返回 值减去数组首地址即可
int a[10]={1,2,2,3,3,3,5,5,5,5};//注意数组坐标从0开始
//寻找3
printf("%d %d\n",lower_bound(a,a+10,3)-a,upper_bound(a,a+10,3)-a);