当前位置: 首页 > news >正文

广告公司网站首页设计页面支付公司网站制作费怎么做分录

广告公司网站首页设计页面,支付公司网站制作费怎么做分录,江苏工程建设标准网站,好看的页面布局stl中的比较最大最小操作 一、概述二、最小值1. min2. min_element 三、最大值1. max2. max_element 四、混合1. minmax2. minmax_element 一、概述 记录这里C11中常用的最小值和最大值的比较函数,最好的参考资料其实就是 https://zh.cppreference.com 最重要的查…

stl中的比较最大最小操作

  • 一、概述
  • 二、最小值
    • 1. min
    • 2. min_element
  • 三、最大值
    • 1. max
    • 2. max_element
  • 四、混合
    • 1. minmax
    • 2. minmax_element

一、概述

记录这里C11中常用的最小值和最大值的比较函数,最好的参考资料其实就是 https://zh.cppreference.com

最重要的查看文档其实就看他的如何实现,这个就是使用的最常用的功能。因为STL用的很多基本上全是函数模板库,都是支持自定义函数函数器作为一个对比选项。

不带 _element 的函数一般用在两个值之间比较,如果很多值,还是用带_element ,这个是去遍历容器比较

就像min、max最后比较两个值,而且返回的是值,min_element、max_element比较容器,返回的是迭代器

二、最小值

1. min

1. 可能的实现

// 版本 1
template<class T> 
const T& min(const T& a, const T& b)
{return (b < a) ? b : a;
}// 版本 2
template<class T, class Compare> 
const T& min(const T& a, const T& b, Compare comp)
{return (comp(b, a)) ? b : a;
}// 版本 3
template<class T>
T min(std::initializer_list<T> ilist)
{return *std::min_element(ilist.begin(), ilist.end());
}// 版本 4
template<class T, class Compare>
T min(std::initializer_list<T> ilist, Compare comp)
{return *std::min_element(ilist.begin(), ilist.end(), comp);
}

从上面的实现其实就能看出来,这个是支持用函数器做自己的特定对比,也是可以通过重载 < 符号去实现对比功能.

而且输入值和输出的模板类型是一样的,

还有一些用的是 min_element 函数为实现,对了min_element的一个适配器。

  1. 例子

下面给一个对比最小值的例子

#include <algorithm>
#include <iostream>
#include <string_view>int main()
{int res_1 = std::min(1, 9999);	// res_1 = 1char res_2 = std::min('a', 'b');	// res_2 = 'a'string res_3 = std::min({"foo", "bar", "hello"}, [](const std::string s1, const std::string s2){return s1.size() < s2.size();}) ;	// res_3 = "foo"
}

2. min_element

看看这个的相关实现

// 版本一
template<class ForwardIt>
ForwardIt min_element(ForwardIt first, ForwardIt last)
{if (first == last)return last;ForwardIt smallest = first;++first;for (; first != last; ++first)if (*first < *smallest)smallest = first;return smallest;
}// 版本二
template<class ForwardIt, class Compare>
ForwardIt min_element(ForwardIt first, ForwardIt last, Compare comp)
{if (first == last)return last;ForwardIt smallest = first;++first;for (; first != last; ++first)if (comp(*first, *smallest))smallest = first;return smallest;
}

从函数的实现来看,外部的函数器的差距就在 一个是用得 ‘<’ ,另外一个用的 comp(*first, *smallest)对比,因为‘<’取决于语言定义或者我们程序员的重载实现的。 后面的其他函数max,minmax都是用的这样的。

这个参数的传入的其实就是迭代器,返回的也是迭代器也需要去解引取值之类的。

就像下面这种代码

std::vector<PointF> points{PointF{-1.43, 5.654}, PointF{2.453, 8.654} , PointF{10.453, -2.654}, PointF{14.453, -8.87}};auto x_minmax = std::minmax_element(points.begin(), points.end(), [](const PointF &p1, const PointF &p2){return p1.x() < p2.x();
}) ;

三、最大值

1. max

max和min是一样的定义方式,其实就是把那个大于小于改了一下

2. max_element

这个的实现也比较简单

// 版本一
template<class ForwardIt>
ForwardIt max_element(ForwardIt first, ForwardIt last)
{if (first == last)return last;ForwardIt largest = first;++first;for (; first != last; ++first)if (*largest < *first)largest = first;return largest;
}// 版本二
template<class ForwardIt, class Compare>
ForwardIt max_element(ForwardIt first, ForwardIt last, Compare comp)
{if (first == last)return last;ForwardIt largest = first;++first;for (; first != last; ++first)if (comp(*largest, *first))largest = first;return largest;
}

四、混合

1. minmax

实现的源码大差不差的如下,是不是比较巧妙和灵活,注意这个是返回的是值,而不是迭代器

//版本一
template<class T> 
constexpr std::pair<const T&, const T&> minmax( const T& a, const T& b )
{return (b < a) ? std::pair<const T&, const T&>(b, a): std::pair<const T&, const T&>(a, b);
}//版本二
template<class T, class Compare> 
constexpr std::pair<const T&, const T&> minmax( const T& a, const T& b, Compare comp )
{return comp(b, a) ? std::pair<const T&, const T&>(b, a): std::pair<const T&, const T&>(a, b);
}//版本三
template< class T >
constexpr std::pair<T, T> minmax( std::initializer_list<T> ilist )
{auto p = std::minmax_element(ilist.begin(), ilist.end());return std::pair(*p.first, *p.second);
}// 版本四
template< class T, class Compare >
constexpr std::pair<T, T> minmax( std::initializer_list<T> ilist, Compare comp )
{auto p = std::minmax_element(ilist.begin(), ilist.end(), comp);return std::pair(*p.first, *p.second);
}

上面的first是小值,second是大值,所以看一下源码就记住了
看看例子

std::pair<int, int> bounds = std::minmax(3, -1);

2. minmax_element

和之前的min_element类似,返回的是一个std::pair<迭代器,迭代器>类型,要取值要自己去解引数据

//版本一
template<class ForwardIt>
std::pair<ForwardIt, ForwardIt> minmax_element(ForwardIt first, ForwardIt last)
{using value_type = typename std::iterator_traits<ForwardIt>::value_type;return std::minmax_element(first, last, std::less<value_type>());
}//版本二
template<class ForwardIt, class Compare>
std::pair<ForwardIt, ForwardIt> minmax_element(ForwardIt first, ForwardIt last, Compare comp)
{auto min = first, max = first;if (first == last || ++first == last)return {min, max};if (comp(*first, *min)) {min = first;} else {max = first;}while (++first != last) {auto i = first;if (++first == last) {if (comp(*i, *min)) min = i;else if (!(comp(*i, *max))) max = i;break;} else {if (comp(*first, *i)) {if (comp(*first, *min)) min = first;if (!(comp(*i, *max))) max = i;} else {if (comp(*i, *min)) min = i;if (!(comp(*first, *max))) max = first;}}}return {min, max};
}

例子如下:

std::vector<int> v {3, 1, 4, 1, 5, 9, 2, 6};
auto bounds = std::minmax_element(v.begin(), v.end());int min = *bounds.first;	// 1
int max = *bounds.second;	// 9
http://www.yayakq.cn/news/71739/

相关文章:

  • 海淀视频网站建设公司注册在哪里合适
  • 自贡公司做网站办公网新闻上传网站开发
  • 招聘网站建设需求文档排名优化哪家专业
  • 苏州做网站哪里好百度指数官方版
  • 淄博外贸网站建设公司郓城县住房和城乡建设局网站
  • 做网站购买什么软件怎么做企业推广
  • 网站设计计划书docker 搭建 wordpress
  • 网站做跳转在后天那个文件里做wordpress实现首页功能能
  • 视频网站如何做营销怎样制作网站教程哪家好
  • 桂林手机网站建设外贸邦海关数据
  • 怎么建一个公司运营网站域名防红短链接
  • 广西建设职业技术学院贫困生网站广告设计公司年终总结
  • 2008r2网站建设郑州平面设计公司排行榜
  • 建设免费手机网站做淘客需要网站
  • 有哪些做企业网站的怎么查看网站百度快照
  • 区块链资讯网站建设广告公司网站设计策划
  • 厦门企业网站开发企业微信一年的费用要多少
  • 网站推广昔年下拉博客网站建设项目需求分析流程
  • 怎么建正规网站永久免费的连外网的软件
  • 做的好的c2c网站关于网站备案
  • 用来做收录的网站做网站寄生虫
  • 金湖网站制作广州网站建设专注乐云seo
  • 如何更换网站域名网站商城建设员招聘
  • 做网站一定需要服务器吗做网站个体户执照
  • 网站开发的ppt报告最好的搜索引擎排名
  • 外贸网站空间上海网站建设公司费用
  • 苏州企业门户网站长沙企业宣传片制作公司
  • 做网站还需要兼容ie6吗wordpress视频 小程序
  • 网站开发的常用软件给你一个网站seo如何做
  • 广东营销网站建设服务公司软件开发工具的公司有哪些