首页 > 其他分享 >【基础】一些新的STL

【基础】一些新的STL

时间:2024-05-03 11:55:25浏览次数:23  
标签:std STL 基础 初始值 reduce 运算符 int minmax 一些

Reduce (C++17)

ll s = reduce(a + 1, a + 1 + n);    // 求和
ll s = reduce(a + 1, a + 1 + n, std::plus<ll>);    // 求和
double s = reduce(a + 1, a + 1 + n, std::multiples<double>);    // 求积
int s = reduce(a + 1, a + 1 + n, std::max<int>);    // 求最大值

把一个数组压缩成一个数字的办法,不保证他们内部的分组和运行的方法。需要传入一个有结合律(associative property)和交换律(commutative property)的二元运算符(注意浮点数的加法是有误差的)。
由于不需要多余的操作,比较好写。

另外这里也暗示了线段树可以通过传入一个二元运算符来实现,TODO。

https://en.cppreference.com/w/cpp/algorithm/reduce

Accumulate

对比常见的 Accumulate,需要传入一个初始值,和一个无需条件的二元运算符,他一定会从左到右执行:

    std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 
    int sum = std::accumulate(v.begin(), v.end(), 0);
    int product = std::accumulate(v.begin(), v.end(), 1, std::multiplies<int>());

但是这个要放一个初始值,初始值是必传的参数,不如上面那个reduce好用。而且reduce跑得还更快。限制是reduce是要求满足交换律和结合律的。

minmax

auto [m, M] = std::minmax(a, b);  // 把a和b之间的最小值放到m,最大值放到M
// 其实不如:
if (a > b) swap (a, b);   // 非常直观

minmax_elements

相当于是min_element和max_element的结合体,返回一个pair,里面是俩迭代器,一次找到最小值和最大值的位置。

标签:std,STL,基础,初始值,reduce,运算符,int,minmax,一些
From: https://www.cnblogs.com/purinliang/p/18171072

相关文章

  • 字符串基础(hash,KMP,AC自动机,trie)
    trie树trie树,又叫字典树,就是把字符串的每个字母看做树上的一个节点,若干个字符串组成了一棵trie树。最一般的trie树好像只能搜索字符串,重点是01trie和可持久化trie树和用trie树来建ac自动机(详见AC自动机)。这里着重介绍一下01trie01trie,就是节点代表了数上的二进制位上的数。......
  • 一些组合数学的证明
    广义二项式系数\(\dbinom{a}{n}=\dfrac{a^\underline{n}}{n!}\)证明:\(\dbinom{a}{n}=C_a^n=\dfrac{a!}{n!(a-n)!},\dfrac{a^\underline{n}}{n!}=\dfrac{\frac{a!}{(a-n)!}}{n!}=\dfrac{a!}{n!(a-n)!}\)对称公式\(\dbinom{n}{m}=\dbinom{n}{n-m}\)证明:......
  • Mysql基础
    为什么要配置环境变量?当你想直接用cmd打开某个.exe软件,但却出现以上情况时,可以通过配置环境变量来解决。配置了常用软件的环境变量后,在系统的任意路径下,打开cmd,输入软件,即可打开应用。环境变量:是在操作系统中用来指定操作系统运行环境的一些参数。环境变量中的path环境变量:......
  • 一些不错的语文题
    金考卷绿色模拟散文1.《蝉自故乡来》与鲁迅《故乡》中“我”的思想变化截然相反故乡中的我在童年时对故乡的人和事都是热爱的,没有渴望远离的想法,(如少年闰土),而成年后回到故乡感到物是人非,才想要逃离故乡(闰土后来的样子可知晓,以及祥林嫂等类似的素材)首先这个文一看就是个咏物......
  • vue-基础
    渲染的范围<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><p>狂神说Java</p><!--view层模板--><divid="app&quo......
  • 自动安装环境shell脚本使用和运维基础使用讲解
    准备和说明确认有网。依赖程序集,官网只提供32位压缩包,手动编译安装后,在64位机上识别不出来,只能用yum包管理从源上拉下来,需要有网。安装unzip,git,wget,用来解压安装包,如果服务器已有会自动跳过安装yum-yinstallunzipyum-yinstallgityum-yinstallwget使用r......
  • 推荐一个教程,适用于想学python但是只学点基础知识用于刷题的
    省流:https://www.bilibili.com/video/BV1Lk4y117Cb?p=1&vd_source=4a339d299e165d8fe38b9926c5240eae我以前一直使用Java刷题,但是随着刷题的数量越来越多,越发感觉Java真的不适合用来刷题,看leetcode里面的大佬们基本都是清一色的c++和python,所以我也是想学点python用于刷题,花了......
  • 个人的一些观点和理解:人工智能领域的因果推理/关系
    AI领域的人一般都认为现在的AI一个最大的缺点就是不具备因果推理,但是如何给现在的AI赋能因果推理能力却一直没有很好的解决,可以说这个因果推理是一个难以解决的难题。个人对因果推理理解的比较少,这里只是记录一下个人的一些浅薄理解。一般认为因果推理的形式基本为:x->y也就......
  • 类基础
    成员函数的声明必须在类内部,定义可内可外,内部的是隐式内联的。当调用一个成员函数的时候,this指针被调用对象初始化。C++允许把this指针声明成指向const对象的指针,在成员函数参数列表后面加const即可,const对象只能调用这种成员函数。类本身是一个作用域,成员函数嵌套在类作用域......
  • Linux基础之网络管理
    目录网络配置服务管理防火墙配置文件下载wget和curl网络连接信息netstat和ssLinux网络管理涉及一系列任务,包括配置网络接口、设置IP地址、管理网络服务和防火墙等。网络配置网卡命名根据网络接口定义设备:ethX传统的以太网接口命名方式,其中X通常是数字,如eth0等wlan......