政府信息网站建设管理/上海优化网站seo公司
一 前言
c++ 标准库中提供了许多操作数据结构:vector、list、deque、map、set 等函数,学习并了解这些常用函数对于我们理解 c++ 的一些设计模式有着重要的作用。
二 常用的 algorithm function 源码
源代码位置:
bits/stl_algo.h
1. accumulate
/*** @brief Accumulate values in a range.** Accumulates the values in the range [first,last) using operator+(). The* initial value is @a init. The values are processed in order.** @param __first Start of range.* @param __last End of range.* @param __init Starting value to add other values to.* @return The final sum.*/
template<typename _InputIterator, typename _Tp>inline _Tpaccumulate(_InputIterator __first, _InputIterator __last, _Tp __init){for (; __first != __last; ++__first)__init = __init + *__first;return __init;}/*** @brief Accumulate values in a range with operation.** Accumulates the values in the range [first,last) using the function* object @p __binary_op. The initial value is @p __init. The values are* processed in order.** @param __first Start of range.* @param __last End of range.* @param __init Starting value to add other values to.* @param __binary_op Function object to accumulate with.* @return The final sum.*/template<typename _InputIterator, typename _Tp, typename _BinaryOperation>inline _Tpaccumulate(_InputIterator __first, _InputIterator __last, _Tp __init,_BinaryOperation __binary_op){for (; __first != __last; ++__first)__init = __binary_op(__init, *__first);return __init;}
accumulate 函数又两个重载版本:
第一个函数的第三个参数是初始值,是单纯的将 数据累加到初始值 init 上;
第二个函数的第三个参数是 “累加” 的初始值,第四个参数是函数或者仿函数对象,是可以自定义 “累加” 的函数 binary_op ,该函数的作用是将迭代器中的每个元素都执行一遍 binar_op 后,将结果 “累加” 到 初始值 init 上
2. for_each
/*** @brief Apply a function to every element of a sequence.* @ingroup non_mutating_algorithms* @param __first An input iterator.* @param __last An input iterator.* @param __f A unary function object.* @return @p __f** Applies the function object @p __f to each element in the range* @p [first,last). @p __f must not modify the order of the sequence.* If @p __f has a return value it is ignored.*/template<typename _InputIterator, typename _Function>_Functionfor_each(_InputIterator __first, _InputIterator __last, _Function __f){for (; __first != __last; ++__first)__f(*__first);return __f; // N.B. [alg.foreach] says std::move(f) but it's redundant.}
for_each 函数第三个函数是函数或者仿函数对象,该函数作用是遍历迭代器,并对迭代器中的每个元素分别执行一次 _Function ,_Function 可以用户自定义
3. replace/replace_if
/*** @brief Replace each occurrence of one value in a sequence with another* value.* @ingroup mutating_algorithms* @param __first A forward iterator.* @param __last A forward iterator.* @param __old_value The value to be replaced.* @param __new_value The replacement value.* @return replace() returns no value.** For each iterator @c i in the range @p [__first,__last) if @c *i ==* @p __old_value then the assignment @c *i = @p __new_value is performed.*/template<typename _ForwardIterator, typename _Tp>voidreplace(_ForwardIterator __first, _ForwardIterator __last,const _Tp& __old_value, const _Tp& __new_value){for (; __first != __last; ++__first)if (*__first == __old_value)*__first = __new_value;}/*** @brief Replace each value in a sequence for which a predicate returns* true with another value.* @ingroup mutating_algorithms* @param __first A forward iterator.* @param __last A forward iterator.* @param __pred A predicate.* @param __new_value The replacement value.* @return replace_if() returns no value.** For each iterator @c i in the range @p [__first,__last) if @p __pred(*i)* is true then the assignment @c *i = @p __new_value is performed.*/template<typename _ForwardIterator, typename _Predicate, typename _Tp>voidreplace_if(_ForwardIterator __first, _ForwardIterator __last,_Predicate __pred, const _Tp& __new_value){for (; __first != __last; ++__first)if (__pred(*__first))*__first = __new_value;}
3.1 replace 函数 第三个参数传入的是待被替换的旧值,第四个参数是 被替换后的新值,该函数执行后,会把迭代器中所有值等于旧值得元素都替换为新值
3.2 replace_if 函数第三个参数是一个函数对象,第四个参数是替换后得新值。该函数得作用是将迭代器中所有符合传入函数规则得旧值替换为新值。
4. count/count_if
template<typename _InputIterator, typename _Predicate>typename iterator_traits<_InputIterator>::difference_type__count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred){typename iterator_traits<_InputIterator>::difference_type __n = 0;for (; __first != __last; ++__first)if (__pred(__first))++__n;return __n;}/*** @brief Count the number of copies of a value in a sequence.* @ingroup non_mutating_algorithms* @param __first An input iterator.* @param __last An input iterator.* @param __value The value to be counted.* @return The number of iterators @c i in the range @p [__first,__last)* for which @c *i == @p __value*/template<typename _InputIterator, typename _Tp>inline typename iterator_traits<_InputIterator>::difference_typecount(_InputIterator __first, _InputIterator __last, const _Tp& __value){return std::__count_if(__first, __last,__gnu_cxx::__ops::__iter_equals_val(__value));}/*** @brief Count the elements of a sequence for which a predicate is true.* @ingroup non_mutating_algorithms* @param __first An input iterator.* @param __last An input iterator.* @param __pred A predicate.* @return The number of iterators @c i in the range @p [__first,__last)* for which @p __pred(*i) is true.*/template<typename _InputIterator, typename _Predicate>inline typename iterator_traits<_InputIterator>::difference_typecount_if(_InputIterator __first, _InputIterator __last, _Predicate __pred){return std::__count_if(__first, __last,__gnu_cxx::__ops::__pred_iter(__pred));}
1. __count_if 函数第三个传入参数是一个函数或者仿函数对象,该函数的作用是遍历迭代器,统计有符合传入函数的元素个数
2. count 函数第三个参数是一个值,该函数作用是遍历迭代器,统计与传入值相等的元素个数
3. count_if 直接调用了 __count_if ,作用与 1 中描述相同
5. find/find_if
/// This is an overload used by find algos for the Input Iterator case.template<typename _InputIterator, typename _Predicate>inline _InputIterator__find_if(_InputIterator __first, _InputIterator __last,_Predicate __pred, input_iterator_tag){while (__first != __last && !__pred(__first))++__first;return __first;}/// This is an overload used by find algos for the RAI case.template<typename _RandomAccessIterator, typename _Predicate>_RandomAccessIterator__find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,_Predicate __pred, random_access_iterator_tag){typename iterator_traits<_RandomAccessIterator>::difference_type__trip_count = (__last - __first) >> 2;for (; __trip_count > 0; --__trip_count){if (__pred(__first))return __first;++__first;if (__pred(__first))return __first;++__first;if (__pred(__first))return __first;++__first;if (__pred(__first))return __first;++__first;}switch (__last - __first){case 3:if (__pred(__first))return __first;++__first;case 2:if (__pred(__first))return __first;++__first;case 1:if (__pred(__first))return __first;++__first;case 0:default:return __last;}}template<typename _Iterator, typename _Predicate>inline _Iterator__find_if(_Iterator __first, _Iterator __last, _Predicate __pred){return __find_if(__first, __last, __pred,std::__iterator_category(__first));}/*** @brief Find the first occurrence of a value in a sequence.* @ingroup non_mutating_algorithms* @param __first An input iterator.* @param __last An input iterator.* @param __val The value to find.* @return The first iterator @c i in the range @p [__first,__last)* such that @c *i == @p __val, or @p __last if no such iterator exists.*/template<typename _InputIterator, typename _Tp>inline _InputIteratorfind(_InputIterator __first, _InputIterator __last,const _Tp& __val){return std::__find_if(__first, __last,__gnu_cxx::__ops::__iter_equals_val(__val));}/*** @brief Find the first element in a sequence for which a* predicate is true.* @ingroup non_mutating_algorithms* @param __first An input iterator.* @param __last An input iterator.* @param __pred A predicate.* @return The first iterator @c i in the range @p [__first,__last)* such that @p __pred(*i) is true, or @p __last if no such iterator exists.*/template<typename _InputIterator, typename _Predicate>inline _InputIteratorfind_if(_InputIterator __first, _InputIterator __last,_Predicate __pred){return std::__find_if(__first, __last,__gnu_cxx::__ops::__pred_iter(__pred));}
1. 第一个 __find_if 函数的第三个参数是函数或者仿函数,第四个参数是 input_iterator_tag (该参数连对应的变量都没有,只有一个类型,其主要作用是为了在重载时与第二个 __find_if 进行区分,毕竟 顺序迭代查找与可以随机访问的查找效率上是不同的),该函数的作用是遍历迭代器,从中找出与传入值相等的元素,若是存在则返回该元素的迭代器,否则返回 _last
2. 第二个 __find_if 函数的第三个参数是 函数或者仿函数,第四个参数是 random_access_iterator_tag (该参数连对应的变量都没有,只有一个类型,其主要作用是为了在重载时与第二个 __find_if 进行区分,毕竟 顺序迭代查找与可以随机访问的查找效率上是不同的),该函数的作用是历迭代器,从中找出与传入值相等的元素,若是存在则返回该元素的迭代器,否则返回 _last,效率上应该比第一个 __find_if 高一些。
3. 第三个 __find_if 函数的第三个参数是 函数或者仿函数,该函数的作用是个中转,其底层调用的是第一个或者第二个函数,只不过多了个询问迭代器类型的操作:std::__iterator_category
4. find 函数第三个参数 const _Tp&是传入一个待查找的值,该函数的作用是若是查找到与该值相等的元素,则返回对应的迭代器,否则返回 __last
5. find_if 函数的第三个参数是 函数或者仿函数,该函数底层调用的是第三个函数 __find_if ,该函数的作用是若是查到元素符合传入的函数规则则返回该元素的迭代器,否则返回 __last
6. sort
待补充
7. binary_search
template<typename _ForwardIterator, typename _Tp, typename _Compare>_ForwardIterator__lower_bound(_ForwardIterator __first, _ForwardIterator __last,const _Tp& __val, _Compare __comp){typedef typename iterator_traits<_ForwardIterator>::difference_type_DistanceType;_DistanceType __len = std::distance(__first, __last);while (__len > 0){_DistanceType __half = __len >> 1;_ForwardIterator __middle = __first;std::advance(__middle, __half);if (__comp(__middle, __val)){__first = __middle;++__first;__len = __len - __half - 1;}else__len = __half;}return __first;}/*** @brief Finds the first position in which @a val could be inserted* without changing the ordering.* @param __first An iterator.* @param __last Another iterator.* @param __val The search term.* @return An iterator pointing to the first element <em>not less* than</em> @a val, or end() if every element is less than * @a val.* @ingroup binary_search_algorithms*/template<typename _ForwardIterator, typename _Tp>inline _ForwardIteratorlower_bound(_ForwardIterator __first, _ForwardIterator __last,const _Tp& __val){return std::__lower_bound(__first, __last, __val,__gnu_cxx::__ops::__iter_less_val());}/*** @brief Determines whether an element exists in a range.* @ingroup binary_search_algorithms* @param __first An iterator.* @param __last Another iterator.* @param __val The search term.* @return True if @p __val (or its equivalent) is in [@p* __first,@p __last ].** Note that this does not actually return an iterator to @p __val. For* that, use std::find or a container's specialized find member functions.*/template<typename _ForwardIterator, typename _Tp>boolbinary_search(_ForwardIterator __first, _ForwardIterator __last,const _Tp& __val){_ForwardIterator __i= std::__lower_bound(__first, __last, __val,__gnu_cxx::__ops::__iter_less_val());return __i != __last && !(__val < *__i);}/*** @brief Determines whether an element exists in a range.* @ingroup binary_search_algorithms* @param __first An iterator.* @param __last Another iterator.* @param __val The search term.* @param __comp A functor to use for comparisons.* @return True if @p __val (or its equivalent) is in @p [__first,__last].** Note that this does not actually return an iterator to @p __val. For* that, use std::find or a container's specialized find member functions.** The comparison function should have the same effects on ordering as* the function used for the initial sort.*/template<typename _ForwardIterator, typename _Tp, typename _Compare>boolbinary_search(_ForwardIterator __first, _ForwardIterator __last,const _Tp& __val, _Compare __comp){_ForwardIterator __i= std::__lower_bound(__first, __last, __val,__gnu_cxx::__ops::__iter_comp_val(__comp));return __i != __last && !bool(__comp(__val, *__i));}
1. 第一个 binary_search 函数的 三个参数 __val 是查找的目标值,该函数的作用是利用二分查找法查找目标值,若是查找到目标值,则返回 true,否则返回 false
2. 第二个 binar_search 函数的第三个参数 __val 是查找的目标值 ,第四个参数 __comp 是函数或者仿函数对象,该函数 是利用二分查找法查找目标值,若是查找到某个值使得 __comp(__val, target) 返回 true,则说明查到了目标值,此时返回 true,否则返回 法拉瑟
三 示例
#include<iostream>
#include<algorithm>using namespace std;struct PredicateReplace: public std::unary_function<int, bool>
{bool operator()(const int x) const{return x % 3 == 0;}
};struct PredictCount: public std::unary_function<int, bool>
{bool operator()(int x){return x % 3 == 1;}
};struct PredictBinarySearch:public std::binary_function<int, int, bool>
{bool operator()(int x, int y){std::cout << "x: " << x << ", y: " << y << std::endl;return x < y;}};int main()
{std::vector<int> vec = {10, 50, 60, 20, 30, 40};int init = 0;// 1. accumulatestd::cout << "------ test accumulate ------" << std::endl;std::cout << std::accumulate(vec.begin(), vec.end(), init) << std::endl; // 210init = 600;std::cout << std::accumulate(vec.begin(), vec.end(), init, std::minus<int>()) << std::endl; // 390std::cout << "------ test accumulate ------" << std::endl;// 2. for_eachstruct printVal{void operator()(int x){std::cout << x << " ";}};std::cout << "------ test for_each ------" << std::endl;std::for_each(vec.begin(), vec.end(),printVal());cout << endl;std::cout << "------ test for_each ------" << std::endl;// 3. replace replace_ifstd::cout << "------ test replace ------" << std::endl;std::replace(vec.begin(), vec.end(), 50, 90);std::for_each(vec.begin(), vec.end(),printVal());cout << endl;std::vector<int> vec_replace1 = vec;std::replace_if(vec_replace1.begin(), vec_replace1.end(), PredicateReplace(), 666);std::for_each(vec_replace1.begin(), vec_replace1.end(),printVal());cout << endl;PredicateReplace pp;std::vector<int> vec_replace2 = vec;std::replace_if(vec_replace2.begin(), vec_replace2.end(), std::not1(pp), 666);std::for_each(vec_replace2.begin(), vec_replace2.end(),printVal());cout << endl;std::cout << "------ test replace ------" << std::endl;// 4. count count_ifstd::cout << "------ test count ------" << std::endl;std::vector<int> vec_cout1 = vec;std::cout << std::count(vec_cout1.begin(), vec_cout1.end(), 60) << std::endl;std::cout << std::count_if(vec_cout1.begin(), vec_cout1.end(), PredictCount()) << std::endl;std::cout << "------ test count ------" << std::endl;// 5. find find_ifstd::cout << "------ test find ------" << std::endl;auto iter = std::find(vec.begin(), vec.end(), 30);if(iter != vec.end())std::cout << *iter << std::endl;iter = std::find_if(vec.begin(), vec.end(), PredictCount());if(iter != vec.end())std::cout << *iter << std::endl;std::cout << "------ test find ------" << std::endl;// 6. sortstd::cout << "------ test sort ------" << std::endl;std::sort(vec.begin(), vec.end(), std::greater<int>());std::for_each(vec.begin(), vec.end(),printVal()); // 60 50 40 30 20 10cout << endl;std::sort(vec.begin(), vec.end(), std::less<int>()); // 10 20 30 40 50 60std::for_each(vec.begin(), vec.end(),printVal());cout << endl;std::cout << "------ test sort ------" << std::endl;// 7. binary_searchstd::cout << "------ test binary_search ------" << std::endl;bool isExists = std::binary_search(vec.begin(), vec.end(), 50);if(isExists){std::cout << "50 is existed. " << std::endl;}else{std::cout << "50 is not existed. " << std::endl;}bool isExists2 = std::binary_search(vec.begin(), vec.end(), 60, PredictBinarySearch());if(isExists2){std::cout << "x == 60 is existed. " << std::endl;}else{std::cout << "x == 60 is not existed. " << std::endl;}std::cout << "------ test binary_search ------" << std::endl;return 0;
}
相关文章:

C++ 学习系列 -- 标准库常用得 algorithm function
一 前言 c 标准库中提供了许多操作数据结构:vector、list、deque、map、set 等函数,学习并了解这些常用函数对于我们理解 c 的一些设计模式有着重要的作用。 二 常用的 algorithm function 源码 源代码位置: bits/stl_algo.h 1. accumu…...

[论文笔记]E5
引言 今天又带来一篇文本匹配/文本嵌入的笔记:Text Embeddings by Weakly-Supervised Contrastive Pre-training。中文题目是 基于弱监督对比预训练计算文本嵌入。 本篇工作提出了E5模型(EmbEddings from bidirEctional Encoder rEpresentations)。该模型以带弱监督信号的对…...

k8s 1.28版本:使用StorageClass动态创建PV,SelfLink 问题修复
k8s中提供了一套自动创建 PV 的机制,就是基于 StorageClass 进行的,通过 StorageClass 可以实现仅仅配置 PVC,然后交由 StorageClass 根据 PVC 的需求动态创建 PV。 问题: 使用 k8s 1.28版本,通过 kubectl get pv…...

漏洞复现-dedecms文件上传(CVE-2019-8933)
dedecms文件上传_CVE-2019-8933 漏洞信息 Desdev DedeCMS 5.7SP2版本中存在安全漏洞CVE-2019-8933文件上传漏洞 描述 Desdev DedeCMS(织梦内容管理系统)是中国卓卓网络(Desdev)公司的一套基于PHP的开源内容管理系统&#x…...

vue分片上传
<template><div><input type"file" id"input" /><button click"uploadFile">上传</button></div> </template><script lang"ts" setup> let chunkSize1024 * 1024,index0; const upl…...

【大数据Hive】hive 表数据优化使用详解
目录 一、前言 二、hive 常用数据存储格式 2.1 文件格式-TextFile 2.1.1 操作演示 2.2 文件格式 - SequenceFile 2.2.1 操作演示 2.3 文件格式 -Parquet 2.3.1 Parquet简介 2.3.2 操作演示 2.4 文件格式-ORC 2.4.1 ORC介绍 2.4.2 操作演示 三、hive 存储数据压缩优…...

京东平台数据分析(京东销量):2023年9月京东吸尘器行业品牌销售排行榜
鲸参谋监测的京东平台9月份吸尘器市场销售数据已出炉! 根据鲸参谋电商数据分析平台的相关数据显示,今年9月,京东吸尘器的销量为19万,环比下滑约12%,同比下滑约25%;销售额为1.2亿,环比下滑约11%&…...

基于springboot实现休闲娱乐代理售票平台系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现休闲娱乐代理售票平台系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把休闲娱乐代理售票管理与现在网络相结合,利用java技术建设休闲娱乐代理售票系统,实现休闲娱乐代理售票的信息化。则对于进一步提高休闲娱乐代理售票管…...

jvm对象内存划分
写此篇博客源于面试问到内存分配的细节,然后不明白问的是什么。回过头发现以前看过这块内容,只是有些印象,但是无法描述清楚。 额外概念了解 jvm内存空间是逻辑上连续的虚拟地址空间(虚拟内存中的概念)映射到物理内存…...

网络原理之TCP/IP
文章目录 应用层传输层UDP协议TCP协议TCP 的工作机制1. 确认应答2. 超时重传3. 连接管理TCP 的建立连接的过程(三次握手),和断开连接的过程(四次挥手)TCP 断开连接, 四次挥手 3. 滑动窗口5. 流量控制6. 拥塞控制7. 延时应答8. 捎带应答9. 面向字节流10. 异常情况 本章节主要讨论…...

Docker:数据卷挂载
Docker:数据卷挂载 1. 数据卷2. 数据卷命令补充 1. 数据卷 数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。 Nginx容器有自己独立的目录(Docker为每个镜像创建一个独立的容器,每个容器都是基于镜像创建的运行实例),…...

你会处理 go 中的 nil 吗
对于下面这段代码,我们知道 i 实际上的值就是 nil,所以 i nil 会生效 func main() {var i *int nilif i nil {fmt.Println("i is nil") // i is nil} }现在换一种写法,我们将 i 的类型改成 interface{},i nil 依然…...

高级深入--day42
注意:模拟登陆时,必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态 COOKIES_ENABLED True 或 # COOKIES_ENABLED False 策略一:直接POST数据(比如需要登陆的账户信息) 只要是需要提供post数据的ÿ…...

mysql 计算两个坐标距离
方式一:st_distance_sphere 计算结果单位米 SELECT *, st_distance_sphere(point(lng,lat),point(lng,lat)) as distance FROM table mysql 版本5.7 以上 方式二:st_distance 计算结果单位是度 SELECT *, (st_distance(point(lng,lat),point(lng4,lat…...

String、StringBuffer、StringBuilder和StringJoiner
String、StringBuffer、StringBuilder和StringJoiner都是用于处理字符串的类,但它们在性能和使用方式上有一些区别。 String String是不可变的类,一旦创建就不能被修改。对String进行拼接或修改时,实际上是创建了一个新的String对象。适用于…...

【数据结构】插入排序
⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 直接插入、希尔排序 1. 什么是排序2…...

Photoshop使用笔记总目录
Photoshop基础学习之工具学习 一、【Photoshop界面认识】 二、【 Photoshop常用快捷键】 三、【色彩模式与颜色填充】 四、【选区】 五、【视图】 六、【常用工具组】 七、【套索工具组】 八、【快速选择工具组】 九、【裁剪工具组】 十、【图框工具组】 十一、【吸取…...

最近面试遇到的高频面试题
大家好,我是 jonssonyan 互联网寒冬?金九银十真的不存在了么?虽说现在行情是差了一些,面试机会少了一些,但是大部分公司还是或多或少的招人,春招秋招都在进行。有人离职就有人入职。所以如果你还没约到面试…...

负载均衡有哪些算法,分别在nginx中如何配置?
负载均衡是用于分发传入的网络流量到多个后端服务器的技术,以确保无单个服务器过载,从而提高应用的可用性和响应时间。以下是一些常用的负载均衡算法,以及如何在Nginx中配置它们: 轮询 (Round Robin): 简介:…...

Starknet开发工具
1. 引言 目前Starknet的开发工具流可为: 1)Starkli:音为Stark-lie,为替换官方starknet-CLI的快速命令行接口。Starkli为单独的接口,可独自应用,而不是其它工具的组件。若只是想与Starknet交互࿰…...

Unity地面交互效果——1、局部UV采样和混合轨迹
大家好,我是阿赵。 这期开始,打算介绍一下地面交互的一些做法。 比如: Unity引擎制作沙地实时凹陷网格的脚印效果 或者: Unity引擎制作雪地效果 这些效果的实现,需要基于一些基础的知识。所以这一篇先介绍一下简单…...

基于STM32的示波器信号发生器设计
**单片机设计介绍,基于STM32的示波器信号发生器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序文档 六、 文章目录 一 概要 基于STM32的示波器信号发生器是一种高性能的电子仪器,用于测试和分析电路中的电信号。在该系统中&a…...

案例分析大汇总
案例分析心得 2018-2022年的案例分析考试内容汇总(近五年) 架构设计题型 软件系统建模 数据库 Web 系统设计 2018年 胖/瘦客户端 C/S 架构非功能性需求 数据流图DFDE-R图Essential Use Cases(抽象用例),Real Use Cases(基础用例)信息工…...

MVCC(Multi-Version Concurrency Control,多版本并发控制)
是一种数据库管理系统中常用的并发控制技术,用于处理多个事务同时访问数据库数据时的数据一致性和隔离性。MVCC的主要目标是允许多个事务并发执行,同时保持数据的一致性,避免数据丢失或不一致。 MVCC 的核心思想是为每个事务维护多个版本的数…...

嵌入式面试2(c相关)
目录 1.C语言中static、const、volatile关键字用法区别; static的用法(定义和用途) const的用法(定义和用途) volatile (英文意思为易变的) 作用和用法: 2.C语言中,const 和 static 的区别,c…...

基于SSM的n省出口基地公共信息服务平台设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...

opencv dnn模块 示例(20) 目标检测 object_detection 之 yolor
文章目录 1、论文介绍1.1、YOLOR思想动机1.2、隐式知识学习1.2.1、隐式知识如何工作1.2.2、隐式知识统一网络建模 1.3、实验1.4、总结 2、测试2.1、opencv dnn2.1.1、代码2.1.2、结果 2.2、测试效率 YOLOR出自论文You Only Learn One Representation: Unified Network for Mult…...

【队列的顺序表示,链式表示】
文章目录 队列的表示和实现相关术语队列的表示链队的表示链队的定义链队的初始化销毁链队列 链队列的入队出栈 队列的表示和实现 相关术语 队列(Queue)是仅在表尾进行插入操作,在表头进行删除操作的线性表。表尾即an端,称为队尾…...

Pydantic 实践
1. 简介 pydantic 库是一种常用的用于数据接口 schema 定义与检查的库。 通过 pydantic 库,我们可以更为规范地定义和使用数据接口,这对于大型项目的开发将会更为友好。 当然,除了 pydantic 库之外,像是 valideer 库、marshmallo…...

获取pandas中的众数
pandas.DataFrame 也有一个 mode() 方法。 以下面的 pandas.DataFrame 为例。 df pd.DataFrame({‘col1’: [‘X’, ‘X’, ‘Y’, ‘X’], ‘col2’: [‘X’, ‘Y’, ‘Y’, ‘X’]}, index[‘row1’, ‘row2’, ‘row3’, ‘row4’]) print(df) col1 col2 row1 X X row2…...