c语言常用库函数(含详细用法),c语言数学库函数
Yyds干货库存
写在前面:该系列文章旨在短时间内复习C/C语法中的重点和易错点,巩固算法竞赛和问题写作过程中常用的语法知识,准确解决学过但忘了的案例,为算法问题刷题打下坚实基础。
c语法基础(九)常用库函数的位操作和12.1位操作符号
执行计算
和
运筹学
~
不
^
异或运算
右移
左移
a相当于a/{2 k} a k相当于a * {2 k}常见运算:求x的第k位,x k ^ 1。
Lowbit(x)=x -x,返回x的最后一位1,以及其后的0。
在计算机中,-x=(~ x ^ 1)
证明:
12.2常用库函数常用库函数一般在#include算法中
12.2.1反向翻转翻转矢量:
reverse(a.begin()、a . end());
翻转数组:
//元素存储在下标1 ~ n中。
反向(a 1,n1);
//元素存储在下标0 ~ n-1中
反向(a,a n);
12.2.2唯一重复数据消除必须首先确保相同的元素在一起。
返回去重后的最后一个迭代器(或指针)(只去掉相邻的相同元素),在打开之前仍然是关闭的,即这个迭代器是去重后最后一个元素的下一个位置。
该函数通常用于离散化。通过使用迭代器(或指针)的减法,可以计算出去除权重后的元素数量。
要对向量进行加权:
//区别在于数组中不同元素的数量
int m=unique(a.begin(),a . end())a . begin();//使用erase函数删除重复数据删除后的备用元素。
a.erase(unique(a.begin(),a.end()),a . end());
要复制数组,元素存储在下标1 ~ n中:
//同上
int m=unique(a 1,a n 1)(a 1);
12.2.3 random_shuffle随机加扰与反向相同。
由于随机种子是常数,所以多次随机化后结果是一样的。如果你想与众不同,你可以用时间作为随机种子。
#包括iostream
#包含算法
#包含矢量
#包括ctime
使用命名空间std
int main()
{
//int a[]={1,1,2,2,3,3,4 };
向量int a({1,2,3,4,5 });
srand(time(0));//time(0)返回从现在到1970年1月1日之间的秒数。
random_shuffle(a.begin()、a . end());
for(int x:a)cout x“”;
cout endl
返回0;
}
12.2.4 sort对两个迭代器(或指针)指定的部分进行快速排序。您可以在第三个参数中传递定义大小比较的函数,或者重载“小于号”运算符。默认情况下,它是从小到大排序的。
sort(a.begin()、a . end());//从小到大
Sort (a.begin(),a.end(),greater int//从大到小
将一个int数组(存储在下标1 ~ n中的元素)从最大到最小排序,并将其传递给比较函数:
int a[MAX _ SIZE];
l boocmp(int a,int b)//a应该在b之前吗?
{
return//如果A是b,那么A应该在b之前。
}
sort(a 1,a n 1,CMP);//采用自定义排序# includechime
使用命名空间std
/*结构记录
{
int x,y;
布尔运算符(常量记录t)常量
{
return x t.x//如果x小于t.x,先来。
}
} a[5];
//a[0] a[1]
*/
结构记录
{
int x,y;
} a[5];
l boocmp(rec a,rec b)//a应该在b之前吗?
{
返回a . x b . x;
}//你可以定义一个比较函数,或者重载数
int main()
{
for(int I=;我我)
{
甲[我]。x=-I;
甲[我]。y=I;
}
for(int I=0;I I)printf((%d,% d),a[i]。x,a[i]。y);
cout endl
sort(a,a 5,CMP);
//sort(a,a 5);如果上面重载了,可以直接用这个方法。
for(int I=0;I I)printf((%d,% d),a[i]。x,a[i]。y);
cout endl
返回0;
}
对自定义结构向量进行排序,并重载“小于号”运算符:
结构记录
{
int id,x,y;
};
矢量记录
布尔运算符(常量记录a,常量记录b)
{
return a . x b . x a . x==b . x a . y b . y;
}
sort(a.begin()、a . end());
12.2.5下限/上限二分法首先必须是有序的。
lower_bound的第三个参数传入一个元素X,对两个迭代器(指针)指定的部分执行二分搜索法,返回指向第一个大于等于X的元素位置的迭代器(指针),No返回空指针。
upper_bound的用法和lower_bound大致相同,唯一的区别是找到第一个大于x的元素,当然两个迭代器(指针)指定的部分要提前排序。
求有序int数组中大于等于x的最小整数的下标(元素存储在下标1 ~ n中):
int i=lower_bound(a 1,a 1 n,x)-a;
在有序向量int中求小于等于x的最大整数(假设必须存在):
int y=* - upper_bound(a.begin(),a.end(),x);
例子
#包括iostream
#包含算法
#包含矢量
#包括ctime
使用命名空间std
int main()
{
int a[]={1,2,4,5,6 };
int *p=lower_bound(a,a 5,7);
cout * p endl
返回0;
}
来自的。如需转载,请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。