数学函数

四舍五入

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

    

        

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值