【C++】C++11 STL算法(六):最小/最大操作(Minimum/maximum operations)、比较运算(Comparison operations)
目录
- 最小/最大操作(Minimum/maximum operations)
- 一、max
- 1、原型:
- 2、说明:
- 3、官方demo
- 二、max_element
- 1、原型:
- 2、说明:
- 3、官方demo
- 三、min
- 1、原型:
- 2、说明:
- 3、官方demo
- 四、min_element
- 1、原型:
- 2、说明:
- 3、官方demo
- 五、minmax
- 1、原型:
- 2、说明:
- 3、官方demo
- 六、minmax_element
- 1、原型:
- 2、说明:
- 3、官方demo
- 七、clamp 从C++17开始
- 1、原型:
- 2、说明:
- 3、官方demo
- 比较运算(Comparison operations)
- 一、equal
- 1、原型:
- 2、说明:
- 3、官方demo
- 二、lexicographical_compare
- 1、原型:
- 2、说明:
- 3、官方demo
最小/最大操作(Minimum/maximum operations)
一、max
1、原型:
template< class T >
const T& max( const T& a, const T& b );template< class T, class Compare >
const T& max( const T& a, const T& b, Compare comp );template< class T >
T max( std::initializer_list<T> ilist );template< class T, class Compare >
T max( std::initializer_list<T> ilist, Compare comp );
2、说明:
返回a、b中较大的一个;返回ilist中最大一个。
std::initializer_list 和 vector 类似,不同的是,initializer_list对象中的元素永远是常量值,我们无法改变initializer_list对象中元素的值。
3、官方demo
#include <algorithm>
#include <iostream>
#include <string>int main()
{std::cout << "larger of 1 and 9999: " << std::max(1, 9999) << '\n'<< "larger of 'a', and 'b': " << std::max('a', 'b') << '\n'<< "longest of \"foo\", \"bar\", and \"hello\": " <<std::max( { "foo", "bar", "hello" },[](const std::string& s1, const std::string& s2) {return s1.size() < s2.size();}) << '\n';
}
Output:
larger of 1 and 9999: 9999
larger of 'a', and 'b': b
longest of "foo", "bar", and "hello": hello
二、max_element
1、原型:
template< class ForwardIt >
ForwardIt max_element( ForwardIt first, ForwardIt last );template< class ForwardIt, class Compare >
ForwardIt max_element( ForwardIt first, ForwardIt last, Compare comp );
2、说明:
返回[first, last)中最大的元素的位置(迭代器)
3、官方demo
#include <algorithm>
#include <iostream>
#include <vector>
#include <cmath>static bool abs_compare(int a, int b)
{return (std::abs(a) < std::abs(b));
}int main()
{std::vector<int> v{ 3, 1, -14, 1, 5, 9 }; std::vector<int>::iterator result;result = std::max_element(v.begin(), v.end());std::cout << "max element at: " << std::distance(v.begin(), result) << '\n';result = std::max_element(v.begin(), v.end(), abs_compare);std::cout << "max element (absolute) at: " << std::distance(v.begin(), result);
}
Output:
max element at: 5
max element (absolute) at: 2
三、min
1、原型:
template< class T >
const T& min( const T& a, const T& b );template< class T, class Compare >
const T& min( const T& a, const T& b, Compare comp );template< class T >
T min( std::initializer_list<T> ilist );template< class T, class Compare >
T min( std::initializer_list<T> ilist, Compare comp );
2、说明:
返回a、b中较小的一个;返回ilist中最小一个。
3、官方demo
#include <algorithm>
#include <iostream>
#include <string>int main()
{std::cout << "smaller of 1 and 9999: " << std::min(1, 9999) << '\n'<< "smaller of 'a', and 'b': " << std::min('a', 'b') << '\n'<< "shortest of \"foo\", \"bar\", and \"hello\": " <<std::min( { "foo", "bar", "hello" },[](const std::string& s1, const std::string& s2) {return s1.size() < s2.size();}) << '\n';
}
Output:
smaller of 1 and 9999: 1
smaller of 'a', and 'b': a
shortest of "foo", "bar", and "hello": foo
四、min_element
1、原型:
template< class ForwardIt >
ForwardIt min_element( ForwardIt first, ForwardIt last );template< class ForwardIt, class Compare >
ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );
2、说明:
返回[first, last)范围内,最小元素的位置(迭代器)
3、官方demo
#include <algorithm>
#include <iostream>
#include <vector>int main()
{std::vector<int> v{3, 1, 4, 1, 5, 9};std::vector<int>::iterator result = std::min_element(v.begin(), v.end());std::cout << "min element at: " << std::distance(v.begin(), result);
}
Output:
min element at: 1
五、minmax
1、原型:
template< class T >
std::pair<const T&,const T&> minmax( const T& a, const T& b );template< class T, class Compare >
std::pair<const T&,const T&> minmax( const T& a, const T& b, Compare comp );template< class T >
std::pair<T,T> minmax( std::initializer_list<T> ilist);template< class T, class Compare >
std::pair<T,T> minmax( std::initializer_list<T> ilist, Compare comp );
2、说明:
以std::pair成对返回最小、最大值。
3、官方demo
#include <algorithm>
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>int main()
{std::vector<int> v {3, 1, 4, 1, 5, 9, 2, 6}; std::srand(std::time(0));std::pair<int, int> bounds = std::minmax(std::rand() % v.size(),std::rand() % v.size());std::cout << "v[" << bounds.first << "," << bounds.second << "]: ";for (int i = bounds.first; i < bounds.second; ++i) {std::cout << v[i] << ' ';}std::cout << '\n';
}
Possible output:
v[2,7]: 4 1 5 9 2
六、minmax_element
1、原型:
template< class ForwardIt >
std::pair<ForwardIt,ForwardIt>minmax_element( ForwardIt first, ForwardIt last );template< class ForwardIt, class Compare >
std::pair<ForwardIt,ForwardIt>minmax_element( ForwardIt first, ForwardIt last, Compare comp );
2、说明:
成对(std::pair)返回[first, last)范围内最小、最大值的位置(迭代器)
3、官方demo
#include <algorithm>
#include <iostream>
#include <vector>int main() {const auto v = { 3, 9, 1, 4, 2, 5, 9 };const auto [min, max] = std::minmax_element(begin(v), end(v));std::cout << "min = " << *min << ", max = " << *max << '\n';
}
Output:
min = 1, max = 9
七、clamp 从C++17开始
1、原型:
template<class T>
constexpr const T& clamp( const T& v, const T& lo, const T& hi );template<class T, class Compare>
constexpr const T& clamp( const T& v, const T& lo, const T& hi, Compare comp );
2、说明:
如果v小于lo,返回lo;如果v大于hi,返回hi;否则返回v;即确保返回的值在lo和hi之间。
3、官方demo
#include <cstdint>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <random>int main()
{std::mt19937 g(std::random_device{}());std::uniform_int_distribution<> d(-300, 300);std::cout << " raw clamped to int8_t clamped to uint8_t\n";for(int n = 0; n < 5; ++n) {int v = d(g);std::cout << std::setw(4) << v<< std::setw(20) << std::clamp(v, INT8_MIN, INT8_MAX)<< std::setw(21) << std::clamp(v, 0, UINT8_MAX) << '\n';}
}
Possible output:
.raw clamped to int8_t clamped to uint8_t
168 127 168
128 127 128
-137 -128 040 40 40-66 -66 0
比较运算(Comparison operations)
一、equal
1、原型:
template< class InputIt1, class InputIt2 >
bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2 );template< class InputIt1, class InputIt2, class BinaryPredicate >
bool equal( InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p );
2、说明:
判读两个序列是否相同。
3、官方demo
#include <algorithm>
#include <iostream>
#include <string>// 判读是否是回文序列
bool is_palindrome(const std::string& s)
{return std::equal(s.begin(), s.begin() + s.size()/2, s.rbegin());
}void test(const std::string& s)
{std::cout << "\"" << s << "\" "<< (is_palindrome(s) ? "is" : "is not")<< " a palindrome\n";
}int main()
{test("radar");test("hello");
}
Output:
"radar" is a palindrome
"hello" is not a palindrome
二、lexicographical_compare
1、原型:
template< class InputIt1, class InputIt2 >
bool lexicographical_compare( InputIt1 first1, InputIt1 last1,InputIt2 first2, InputIt2 last2 );template< class InputIt1, class InputIt2, class Compare >
bool lexicographical_compare( InputIt1 first1, InputIt1 last1,InputIt2 first2, InputIt2 last2,Compare comp );
2、说明:
按照字典顺序比较第一个序列是否小于第二个序列。
3、官方demo
#include <algorithm>
#include <iostream>
#include <vector>
#include <random>int main()
{std::vector<char> v1 {'a', 'b', 'c', 'd'};std::vector<char> v2 {'a', 'b', 'c', 'd'};std::mt19937 g{std::random_device{}()};while (!std::lexicographical_compare(v1.begin(), v1.end(),v2.begin(), v2.end())) {for (auto c : v1) std::cout << c << ' ';std::cout << ">= ";for (auto c : v2) std::cout << c << ' ';std::cout << '\n';std::shuffle(v1.begin(), v1.end(), g);std::shuffle(v2.begin(), v2.end(), g);}for (auto c : v1) std::cout << c << ' ';std::cout << "< ";for (auto c : v2) std::cout << c << ' ';std::cout << '\n';
}
Possible output:
a b c d >= a b c d
d a b c >= c b d a
b d a c >= a d c b
a c d b < c d a b
相关文章:

springboot之定时任务
定时线程 说到定时任务,通常会想到JDK自带的定时线程来执行,定时任务。 回顾一下定时线程池。 public static ScheduledExecutorService newScheduledThreadPool(int var0) {return new ScheduledThreadPoolExecutor(var0);}public static ScheduledExec…

10只机器狗拉卡车!井然有序,毫不费力 | 极客头条
整理 | 琥珀出品 | AI科技大本营(ID:rgznai100)看来,这家娱乐网友多年的机器人公司终于要开始实现商用化了!最先备受期待的是它的网红机器狗 SpotMini。今日凌晨,据多家外媒报道,波士顿动力 (Boston Dynami…

linux下查看nginx,apache,mysql,php的编译参数
有时候nginx,apache,mysql,php编译完了想看看编译参数可以用以下方法 nginx编译参数: #/usr/local/nginx/sbin/nginx -V nginx version: nginx/0.6.32 built by gcc 4.1.2 20071124 (Red Hat 4.1.2-42) configure arguments: --us…

【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)
排列操作(Permutation operations) 一、is_permutation 1、原型: template< class ForwardIt1, class ForwardIt2 > bool is_permutation( ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2 );template< class ForwardIt…

码书:入门中文NLP必备干货:5分钟看懂“结巴”分词(Jieba)
导读:近年来,随着NLP技术的日益成熟,开源实现的分词工具越来越多,如Ansj、盘古分词等。在本文中,我们选取了Jieba进行介绍和案例展示,主要基于以下考虑:社区活跃。截止本文发布前,Ji…

《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想
前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读。 写博、写书完整历程回顾 从2013年12月注册博客园账号,注册博客园账…

JSF实现“Hello World!”
我们编写一个在页面上显示是“Hello World! ”,我们至少需要编写一个Page对象和一个对应模板文件(tml)。 第一步,Page对象编写 在Tapestry5中Page是与一个页面对应的POJO对象,它不需要继承Tapestry框架的任何基类或实现…

《权力的游戏》最终季上线!谁是你最喜爱的演员?这里有一份Python教程 | 附源码...
译者 | 刘畅编辑 | 琥珀出品 | AI科技大本营(id:rgznai100)《权力的游戏》最终季已于近日开播,对于全世界翘首以待的粉丝们来说,其最大的魅力就在于“无法预知的人物命运”。那些在魔幻时代的洪流中不断沉浮的人们&…

【C++】C++11 STL算法(八):对未初始化内存的操作(Operations on uninitialized memory)、C库(C library)
对未初始化内存的操作(Operations on uninitialized memory) 一、uninitialized_copy 1、原型: template< class InputIt, class ForwardIt > ForwardIt uninitialized_copy( InputIt first, InputIt last, ForwardIt d_first );2、…

OSPF高级设置实现全网互通
OSPF(开放式最短路径优先)是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部(AS)。采用戴克斯特拉算法(Dijkstras algorithm)被用来计算最短路径树。“Cost”作为路由度量值。链…

学习PHP ?
学PHP的决定真的是好的吗? 不怕又再错一次了吗? 已经是最后的一年半上学时间了.... 真的不愿再走之前那条失败的路,不愿,真的不愿; 这年半无论如何都要把一样技术搞精了 一年半的时间,对我来讲够了....只看…

【数据库】sqlite中的限制:数据库大小、表数、列数、行数、参数个数、连接数等
目录一、参考网址二、详解1、查看、设置sqlite限制命令.limit2、SQLite中的限制汇总1)字符串或BLOB的最大长度2)最大列数3)SQL语句的最大长度4)联接中的最大表数5)表达式树的最大深度6)函数的最大参数个数7…
flutter中的生命周期
前言 和其他的视图框架比如android的Activity一样,flutter中的视图Widget也存在生命周期,生命周期的回调函数提现在了State上面。理解flutter的生命周期,对我们写出一个合理的控件至关重要。组件State的生命周期整理如下图所示: 大…

小鱼易连获腾讯数亿C轮投资,云视频布局产业互联网
4 月 18 日,小鱼易连在北京举行 “鱼腾视界 产业互联” 战略合作暨融资发布会上,正式宣布获得 C 轮融资,由腾讯领投。融得的资金将全面用于小鱼易连云视频系统在产业互联网领域的落地,打通企业、政府、个人三者之间的柔性生态全产…

异步IO一定更好吗?
http://cnodejs.org/blog/?p1015续:异步IO一定更好吗?我之前的一篇文章《异步IO一定更好吗?》中举了一个很变态的例子,用以说明在单碟机械式硬盘上异步IO反而可能降低性能的问题,大家的讨论很热烈。前天的NodeParty杭…

谈谈Python那些不为人知的冷知识(二)
本文转载自Python的编程时光(ID:Python-Time)小明在日常Code中遇到一些好玩,冷门的事情,通常都会记录下来。从上一篇的分享来看,仍然有不少 Pythoner 对这些冷知识存在盲区,所以今天迎来第二篇。如果上篇你…
前端每日实战:45# 视频演示如何用纯 CSS 创作一个菱形 loader 动画
效果预览 按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。 https://codepen.io/comehope/pen/eKzjqK 可交互视频教程 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。 请用 chrome, safari, edge 打开观看。…

【数据库】SQLite和MySQL之间的对比和选择
目录1、各自特定2、使用场景3、选择哪个1、各自特定 SQLite :独立、简单(零配置);适用于为单个应用程序和设备提供本地数据存储。 MySQL:可伸缩、高并发性;适用于客户端/服务器模式企业数据的共享数据存储…

MySql中管理百万级要注意些什么东西(转载)
一、我们可以且应该优化什么? 硬件 操作系统/软件库 SQL服务器(设置和查询) 应 用编程接口(API) 应用程序 二、优化硬件 如果你需要庞大的数据库表 (>2G),你应该考虑使用64位的硬件结构,像Alpha、Sparc或即将推出的IA64。因为MySQL内部使用…

【数据库】sqlite3数据库备份、导出方法汇总
【数据库】sqlite3常用命令及SQL语句 目录1、直接拷贝数据库2、使用.backup .clone1)交互式2)脚本3、导出到csv文件中(其它格式类似)1)交互式2)脚本3)导出成其它格式汇总a> .mode asciib>…

高通与苹果宣布“复合”,英特尔黯然退场 | 极客头条
作者 | 郭芮转载自公众号CSDN(ID:CSDNnews)为期两年的苹果高通“诉讼之争”经历了各种推波助澜愈演愈烈,俨然到了最为关键的白热化阶段,没成想,在刚刚正式进入美国司法庭审环节的两天后却被强势叫停了!4 月…
MQTT 协议 Client ID 长度不能超过23个字符
今天遇到一个MQTT的问题,MqttException: MQIsdp ClientId > 23 bytes ClientId的长度大于23时,无法链接MQTT服务器。 经过查看协议发现:客户端标识符(Client ID)是介于1和23个字符长度,客户端到服务器的唯一标识。它必须在搜有客户端连接到…

【数据库】适用于SQLite的SQL语句(一)
目录一、统计函数二、表TABLE1、创建表CREATE TABLE2、更改表ALTER TABLE3、删除表DROP TABLE三、分析表ANALYZE四、附加数据库 ATTACH DATABASE五、事务六、核心函数七、索引INDEX1、创建索引:CREATE INDEX2、查看索引:3、使用索引 INDEXED BY4、删除索…

谷歌大神Jeff Dean点赞网红博士论文:改进分布式共识机制 | 技术头条
作者 | Heidi Howard编译 | 刘静本文转载自公众号图灵TOPIA(ID:turingtopia)本文作者Heidi Howard,是剑桥大学计算机科学与技术系系统研究小组的分布式系统研究员。Heidi的研究领域一直围绕分布式系统中的一致性,容错性和性能并且…

使用Nginx做前端服务器时让Apache得到真实IP的方法
一:nginx.conf proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 其实这个proxy.conf里面默认都有,在nginx.conf使用include proxy.conf就可以 二:apa…

Hadoop生态圈-hive五种数据格式比较
Hadoop生态圈-hive五种数据格式比较 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。

华为巨资收购为云计算趟平道路?
华为巨资收购为云计算趟平道路?<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />文 小刀马众所周知,华为在全球的技术能力和市场地位也是有目共睹的,这是华为多少年兢兢业业守成的一种回报。更…

【数据库】适用于SQLite的SQL语句(二)
目录九、视图VIEW1、创建视图2、删除视图十、虚拟表1、创建虚拟表2、删除虚拟表十一、时间和日期的函数十二、分析和故障排除十三、SQL语句中的表达式1、运算符2、字面值3、参数十四、插入 INSERT十五、SQLite关键字十六、解决冲突 ON CONFLICT九、视图VIEW 视图是基于真实数据…

从对ML一窍不通到斩获AT等special offer,拿下大厂算法岗就靠它了
整理 | 一一出品 | AI科技大本营(ID:rgznai100)2019 年春招就要过去,秋招也就不远了。对于很多计算机专业的毕业生来说,大部分都还处于迷茫期,由于大学时的大部分时间都可能在划水,导致不知道现在如何准备就…

WWDC2018总结
本人的第一篇文章(现在写文章是为了提升自己的语句表达能力) 欢迎大家观看本文章,是略微总结一下WWDC2018发布的iOS12的新东西 iOS12略微总结(持续更新。。。) iOS12 变化 iOS 12新功能汇总(后面希望可以上…