首页 > 其他分享 >ACM常用STL函数

ACM常用STL函数

时间:2023-11-25 21:55:04浏览次数:35  
标签:0000 函数 STL 元素 ACM 1111 int 数组 序列

max() min()

找多个元素的最大值和最小值

max(a,b)比较两个元素
mx = max({a,b,c,d});比较多个元素

lower_bound() upper_bound()

寻找第序列第n小的值的地址

//在a数组中查找第一个大于等于x的元素,返回该元素的地址
int *p = lower_bound(a,a+n,x);
//在a数组中查找第一个大于x的元素,返回该元素的地址
int *p = upper_bound(a,a+n,x);
其元素下标pos = p-a;

//如果未找到,返回尾地址的下一个位置的地址

reverse

对序列进行翻转

string s = "abcde";
reverse(s.begin(),s.end());//对s进行翻转
cout<<s<<'\n';//edcba

//对a数组进行翻转
int a[] = {1,2,3,4};
reverse(a,a+4);
cout<<a[0]<<a[1]<<a[2]<<a[3];//4321

__gcd(a,b)

求a和b的最大公约数

unique(beg,end)

头文件algorithm
要求:消除重复元素一般需要原序列是有序序列
消除重复元素,返回消除完重复元素的下一个位置的地址,复杂度O(N)
我们可以这么求解有序序列中不重复元素的个数:

int a[8]={1,2,3,3,3,5,6,7};
int len = unique(a,a+8)-a;//返回有序序列的长度
//最后一个不重复元素的下标为len-1

sort()

常见用法:排序

//对a数组的[1,n]位置进行从小到大排序
sort(a+1,a+1+n);

//对a数组的[0,n-1]位置从大到小排序:
sort(a,a+n,greater<int>());
//对a数组的[0,n-1]位置从小到大排序:
sort(a,a+n,less<int>());

//自定义排序,定义比较函数
bool cmp(node a,node b)
{
    //按结构体里面的x值降序排列
    return a.x>b.x;
}
sort(node,node+n,cmp);

cin加速

在ACM里,经常出现 数据集超大造成 cin TLE的情况(CCPC惨痛经历)。这时候大部分人(包括原来我也是)认为这是cin的效率不及scanf的错,甚至还上升到C语言和C++语言的执行效率层面的无聊争论。其 实像上文所说,这只是C++为了兼容而采取的保守措施。我们可以在IO之前将stdio解除绑定,这样做了之后要注意不要同时混用cout和printf 之类。
在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。

ios::sync_with_stdio(false);//消除输入输出缓存
cin.tie(0);//解除cin与cout的绑定,加快速率。

memset

常见用法:

常用于图论
memset(h,-1,sizeof h);//将h数组每个元素初始化为-1
memset(dis,0x3f,sizeof dis)//将dis数组每个元素初始化为1e9,近似于正无穷
memset(vis,0,sizeof vis)//将vis数组每个元素初始化为0,标记第i个点未被访问过

原理:
void *memset(void *s,int c,unsigned long n);
函数功能:为指针变量s所指的前n个字节的内存单元填充给定的int型数值c,它可以为任何数据进行初始化。换句话说,就是将数值c以单个字节逐个拷贝的方式放到指针变量s所指的内存中去。 注意:只将数值c的最低一个字节填充到内存。
-1在计算机中存储为:1111 1111,填充到int后为“1111 1111 1111 1111 1111 1111 1111 1111”,也是-1。
0在计算机中存储为:0000 0000,填充到int后为“0000 0000 0000 0000 0000 0000 0000 0000”,也是0。
0x3f在计算机中存储为:0011 1111,填充到int后为"0011 1111 0011 1111 0011 1111 0011 1111",十进制为为1,061,109,567。
剩下的看你们的现象发挥了
如果赋某个特定的数会出错,赋值特定的数建议使用fill()

memcpy

常见用法
memcpy(目标地址,源地址,字节数);

int a[M]={0,1,2};
int b[N]={0,0,0,0,0,0,0};
memcpy(b,a,sizeof(a));//将a数组的前M个数组复制到b数组的前M和位置

next_permutation(beg,end)

求序列的下一个排列,下一个排列是字典序大一号的排列
例如:n=3的全排序有:
123
132
213
231
312
321

a[3]={3,1,2};
next_permutation(a,a+3);
//此时a[3]={3,2,1}

_builtin 内置位运算函数

__builtin_popcount(x) 返回x的二进制形式中1的个数
__builtin_ffs(x) 二进制中对应最后一位1的位数,比如4会返回3(100)和lowbit极为相似对不

random_shuffle()

对序列随机重排

nth_element(beg,nth,end)

寻找第序列第n小的值

标签:0000,函数,STL,元素,ACM,1111,int,数组,序列
From: https://www.cnblogs.com/2002cjc/p/17856188.html

相关文章

  • 5.7 Windows驱动开发:取进程模块函数地址
    在笔者上一篇文章《内核取应用层模块基地址》中简单为大家介绍了如何通过遍历PLIST_ENTRY32链表的方式获取到32位应用程序中特定模块的基地址,由于是入门系列所以并没有封装实现太过于通用的获取函数,本章将继续延申这个话题,并依次实现通用版GetUserModuleBaseAddress()取远程进程中......
  • 常用STL
    vector(动态数组)vector为可变长数组(动态数组),定义的vector数组可以随时添加数值和删除元素。需要的头文件vector。定义和使用初始化//方式一:通过下标访问,假设num数组中已经有了5个元素cout<<num[4]<<"\n";//输出第五个数据//一二维可变数组和普通数组的访问方法一样//方......
  • c++ 为什么引入函数对象?
    C++引入函数对象主要是因为函数对象具有以下优势:函数对象可以有自己的状态:我们可以在类中定义状态变量,这样一个函数对象在多次的调用中可以共享这个状态。但是函数调用没这种优势,除非它使用全局变量来保存状态。函数对象有自己特有的类型,而普通函数无类型可言:这种特性对......
  • 函数式编程注意点
    函数式编程&lambda表达式今天在回顾学习java动态数组的基本操作时,学到:如果测试者要拿到方法内属性时,可以用函数式编程获取。函数式编程关注:返回值和参数个数。Consumer类返回类型void,参数只有一个,调用其accept方法用来操作。{{uploading-image-867431.png(uploading...)}}......
  • 11.25-task3变量与函数
    变量与函数变量变量是一个名字,用来储存一段数据!变量的值可变化,新值会覆盖之前的值变量相当于一个标签,如a=10,在内存中找一个位置,把地址赋给了a。。命名规则数字不能开头!最好不要用保留字符作为变量名!!!!多变量赋值在进行多变量赋值时,需要将变量之间用,隔开等号右边......
  • C++回调函数的定义和调用
    文章目录一、C++回调函数1.C/C++回调函数2.普通回调3.函数指针4.C++类的静态函数作为回调函数5.类的非静态函数作为回调函数6.Lambda表达式作为回调函数7.std::funtion和std::bind的使用二、其他参考资料 一、C++回调函数C++回调函数1.C/C++回调......
  • 变量与函数
    变量与函数变量新值会覆盖旧值新值数据类型不必与旧值相同**变量是一个标签变量命名规则必须以字母或下划线开头命名可由字母、数字、下划线组成大小写敏感尽量避免使用保留字命名更新变量x=5x+=2print(x)7多变量赋值a,b,c=1,2,3#元组的解包print(f......
  • map函数用法
    map函数用法描述map()根据提供的函数对指定序列做映射fuction以每一个元素调用,并且返回每次fuction函数返回值的新列表语法map(fuction,iterable,)​函数一个或多个序列def**square(x):#计算平方数 return**x**2map(square,[1,2,3,4,5])......
  • 无涯教程-Tk - Scale部件函数
    比例小部件用于通过滑块选择数字值。scale小部件的语法如下所示-scalescaleNameoptionsScale-参数下表中列出了可用于缩放窗口小部件的选项-Sr.No.Syntax&Remark1-backgroundcolor用于设置小部件的背景颜色。2-borderwidthwidth用于在3D效果中使用边框绘......
  • Python:数据类型与操作,变量与函数
    数据类型1.整数Integer(int)2.浮点数Float(默认双精度)3.布尔值Boolean(bool)4.类型Typeprint(type(2))<class'int'>`print(type(2<2.2))<class'bool'>print(type(type(2)))<class'type'>常数1.python内置常量Ture,用于表示布尔真False......