C++初学者指南-5.尺度库(第一部分)--尺度库最小/最大算法 ...

打印 上一主题 下一主题

主题 228|帖子 228|积分 684

C++初学者指南-5.尺度库(第一部分)–尺度库min/max算法


  
C++尺度库算法是一块新领域?⇒简短介绍
min

   min(a, b) → a 假如 a < b则返回a,否则返回b
min(a, b, cmp(o,o)→bool) → 假如 cmp(a,b) 为真则返回a, 否则返回b
cppreference
  1. int const a = 2;
  2. int const b = 9;
  3. int x = std::min(a,b);  // int x = 2
  4. struct P { int q; char c; };
  5. P pmin = std::min(P{1,'y'}, P{2,'x'},
  6. [](P p1, P p2){ return p1.q < p2.q; });  // P pmin {1,'y'};
复制代码
运行示例代码
    min({v1,v2,v3,…}) → 求最小值 (C++11)
min({v1,v2,v3,…}, cmp(o,o)→bool) → 求最小值
第二个版本使用cmp来比力元素
当第一个版本使用 operatior < 来进行比力时,
所有输入列表{…}元素范例必须一致
cppreference
  1. int const a = 2;
  2. int const b = 9;
  3. int x = std::min({3,4,b,3,a,8});  // int x = 2
复制代码
运行示例代码
    ranges::min(range) → 求最小值 (C++20)
ranges::min(range, cmp(o,o)→bool) → 求最小值
返回范围内最小元素的常量引用
第二个版本使用 cmp 来比力元素,而第一个版本使用 operator <
cppreference
  1. std::vector<int> v {7,9,3,5,3,1,4,8};
  2. auto x = std::ranges::min(v);  // int x = 1
  3. struct P { int q; char c; };
  4. std::vector<P> const w {P{3,'a'},P{1,'c'},P{2,'b'}};
  5. auto pmin = std::ranges::min(w,
  6. [](P const& p1, P const& p2){ return p1.q < p2.q; });  // P pmin {1,'c'}
复制代码
运行示例代码
  max

   max(a, b) → 假如 a < b为假则返回a,否则返回b
max(a, b, cmp(o,o)→bool) → 假如 cmp(a,b) 为假则返回a,否则返回b
cppreference
  1. int const a = 2;
  2. int const b = 9;
  3. int x = std::max(a,b);  // int x = 9
  4. struct P { int q; char c; };
  5. P pmax = std::max(P{1,'y'}, P{2,'x'},
  6. [](P p1, P p2){ return p1.q < p2.q; });  // P pmax {2,'x'};
复制代码
运行示例代码
    max({v1,v2,v3,…}) → 求最大值 (C++11)
max({v1,v2,v3,…}, cmp(o,o)→bool) → 求最大值
第二个版本使用 cmp 来比力元素
当第一个版本使用operator <来比力元素时:
所有输入列表{…}元素范例必须一致
cppreference
  1. int const a = 2;
  2. int const b = 9;
  3. int x = std::max({3,4,b,3,a,8});  // int x = 9
复制代码
运行示例代码
    ranges::max(range) → 求最大值 (C++20)
ranges::max(range, cmp(o,o)→bool) → 求最大值
返回范围内最大元素的常量引用
第二个版本使用cmp用于比力元素,而第一个版本使用operator <
cppreference
  1. std::vector<int> v {7,9,3,5,3,1,4,8};
  2. auto x = std::ranges::max(v);  // int x = 9
  3. struct P { int q; char c; };
  4. std::vector<P> const w {P{1,'c'},P{3,'a'},P{2,'b'}};
  5. auto pmax = std::ranges::max(w,
  6. [](P p1, P p2){ return p1.q < p2.q; });  // P pmax {3,'a'}
复制代码
运行示例代码
  minmax

   minmax(a, b) → {最小值, 最大值}  (C++11)
minmax(a, b, cmp(o,o)→bool) → {最小值,最大值}
假如a的排序在b之前,比力函数/对象cmp(a,b)必须返回true
cppreference
  1. int a = 2;
  2. int b = 9;
  3. auto p = std::minmax(a,b);  // std::pair<int,int> p {2,9}
  4. auto min = p.first;  // int min = 2
  5. auto max = p.second; // int max = 9
  6. auto [lo,hi] = std::minmax(a,b);  // int lo = 2, hi = 9  C++17
复制代码
运行示例代码
    minmax({v1,v2,v3,…}) → {最小值,最大值}  (C++11)
minmax({v1,v2,v3,…}, cmp(o,o)→bool) → {最小值,最大值}
第二个版本使用 cmp 来比力元素,
当第一个版本使用 operator < 比力元素时,
所有输入列表{…}元素范例必须一致
cppreference
  1. int const a = 2;
  2. int const b = 9;
  3. auto p = std::minmax({3,0,b,3,a,8});  // std::pair<int,int> p {0,9}
  4. auto min = p.first;  // int min = 0
  5. auto max = p.second; // int max = 9
  6. auto [lo,hi] = std::minmax({3,0,b,3,a,8});  // int lo = 0, hi = 9  C++17
复制代码
运行示例代码
    ranges::minmax(range) → {最小值,最大值} (C++20)
ranges::minmax(range, cmp(o,o)→bool) → {最小值,最大值}
返回一对范围内的最小和最大元素的常量引用; 第2版使用cmp来比力元素,而第1版使用 operator <
cppreference
  1. std::vector<int> v {7,9,3,5,3,1,4,8};
  2. auto p = std::ranges::minmax(v);  // std::pair<int,int> p {1,9}
  3. auto [min,max] = std::ranges::minmax(v);
  4. struct P { int q; char c; };
  5. std::vector<P> const w {P{3,'a'},P{2,'b'},P{1,'c'}};
  6. auto [lo,hi] = std::ranges::minmax(w,
  7. [](P p1, P p2){ return p1.q < p2.q; });  // P lo {1,'c'}, hi {3,'a'}
复制代码
运行示例代码
  clamp (C++17)

   clamp(value, lo, hi) → 返回限定值
clamp(value, lo, hi, cmp(o,o)→bool) → 返回限定值
限定值在lo和hi之间
第二个版本使用 cmp 来比力值,而不是用 operator <
cppreference
  1. int a = std::clamp( 8,  1, 5);  // int a =  5
  2. int b = std::clamp(-4,  1, 5);  // int b =  1
  3. int c = std::clamp(-4, -2, 5);  // int c = -2
复制代码
运行示例代码
  min_element

   

第二个版本使用“compare”来比力元素,
而第一个版本使用 operator <
cppreference

运行示例代码
   

使用operator < 来比力元素;或者可以作为第二个参数传递自界说的函数对象 comp来比力元素
cppreference
  1. std::vector<int> v {7,9,3,5,3,2,4,1,8,0};
  2. auto i = std::ranges::min_element(v);
  3. auto min = *i;  // int min = 0
复制代码
运行示例代码
  max_element

   

     第二个版本使用“compare”来比力元素,
而第一个版本使用 operator <
cppreference

运行示例步伐
      

使用operator < 来比力元素;或者可以作为第二个参数传递自界说的函数对象 comp来比力元素
cppreference
  1. std::vector<int> v {7,9,3,5,3,2,4,1,8,0};
  2. auto i = std::ranges::max_element(v);
  3. auto max = *i;  // int max = 9
复制代码
运行示例代码
  minmax_element

   

返回一个指向输入范围中最小和最大元素的迭代器对std::pair;
第二个版本使用 comp 来比力元素,
而第一个版本使用 operator <
cppreference

运行示例代码
   

返回一个std::pair,其中包含输入范围中最小和最大元素的迭代器;
使用operator < 来比力元素;或者作为第二个参数传递一个自界说函数(对象)cmp
cppreference
  1. std::vector<int> v {7,1,3,5,3,8,6,2,9,0};
  2. auto [i,j] = std::ranges::minmax_element(v);
  3. auto min = *i;  // int min = 0
  4. auto max = *j;  // int max = 9
复制代码
运行示例代码
  相关内容

视频:最大最小算法 by Conor Hoekstra
尺度算法概述
C++尺度库算法介绍
尺度序列容器(vector、deque、list、…)
尺度关联容器(map、set、…)
尺度序列视图
cppreference:算法库
cppreference:容器库
视频:什么是 C++ 尺度库?
视频:一小时内掌握 105 个 STL 算法 (Jonathan Boccara,2018)
C++ 之旅:容器和算法
算法概述表:

附上原文链接
假如文章对您有用,请顺手点个赞,谢谢!^_^

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

高级会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表