可能有用的函数

来源:互联网 发布:广东韶关网络问政平台 编辑:程序博客网 时间:2024/05/22 07:04

<cmath>

double hypot(double x, double y)

求三角形斜边 (hypotenuse) 


<cmath>

double frexp(double x, int &exp)

x分解成尾数和指数,指数存入exp,返回尾数


1..n的圈,循环数d步。

p = (p + d + n - 1) % n +1;(从1到n)

p = (p + d + n) % n;(从0到n - 1)

<cctype>

bool isalpha(char)

bool isdigit(char)

char toupper(char)


<cmath>

double pow(double a, double b) a ^ b

返回double,误差挺大的,比如int t = 2,pow(10,t),不同编译器,有可能返回99.99999,直接赋给int,只得到99。


double round(double x)

将x向最近的整数取整,即四舍五入,然后转化为double。

一定要用pow可以(int)round(pow(10,t))

或者直接循环t次乘10。


double floor(double x)

double ceil(double x)


<algorithm>

int p =lower_bound(a , a + n, x) - a;

在有序数组中, a到a + n中寻找大于等于x的数,返回第一个符合条件的数的地址。

// p就为坐标

// if(a[p] == x)...


vector <int> v;

v.resize(int t) //改变大小,使只保留0 - t-1个元素

v.pop_back() //删除最后一个元素


<cstdlib>

stand(time(NULL));//程序执行开头调用一次即可,不能每次产生随机数时调用。

rand();//随机均匀生成[0,RAND_MAX]中的整数,RAND_MAX至少为32767

若要生成[0,n]中的数,rand() / RAND_MAX * n,四舍五入,若n很大精度稍差。


string s;

s.substr(id,len);//以下标id为开头,长度为len的子串

s.substr(id);//以下标id为开头,一直到末尾的子串

s.find(char c);//返回第一个该字符的下标

if(s.find(char c) !=string::npos) {} //当找得到字符时才进行操作


C++ STL 求向量中的最大值和最小值

min_element(v.begin(),v.end())  返回最小的元素的位置

max_element(v.begin(),v.end()) 

序列 [first, last)。 


trick:

数字比较大小:1.先比位数,位数多的数大 2.再比数字大小,从前往后,数字大的数大

字符串比较大小:1.从前往后,比较字符大小,字符大的串大 2.再比位数,前面字符均一样,最后长的串大

时间比较大小(进制相同12/24,格式hh:mm:ss)1.从前往后,数字大的时间大。 所以可以直接用字符串比较


tip:

string t;

t = 'a' + t; 每次其实都将t向后移动,虽然可以这么写,但是容易超时,(3e5 2000ms + TLE)

t += 'a'; 每次在最后加,reverse(t.begin(),t.end()) (相同规模下,140ms)


0 0
原创粉丝点击