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

C++ 学习系列 -- 标准库常用得 algorithm function

一   前言

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 标准库中提供了许多操作数据结构&#xff1a;vector、list、deque、map、set 等函数&#xff0c;学习并了解这些常用函数对于我们理解 c 的一些设计模式有着重要的作用。 二 常用的 algorithm function 源码 源代码位置&#xff1a; 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 的机制&#xff0c;就是基于 StorageClass 进行的&#xff0c;通过 StorageClass 可以实现仅仅配置 PVC&#xff0c;然后交由 StorageClass 根据 PVC 的需求动态创建 PV。 问题&#xff1a;   使用 k8s 1.28版本&#xff0c;通过 kubectl get pv…...

漏洞复现-dedecms文件上传(CVE-2019-8933)

dedecms文件上传_CVE-2019-8933 漏洞信息 Desdev DedeCMS 5.7SP2版本中存在安全漏洞CVE-2019-8933文件上传漏洞 描述 ​ Desdev DedeCMS&#xff08;织梦内容管理系统&#xff09;是中国卓卓网络&#xff08;Desdev&#xff09;公司的一套基于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月份吸尘器市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年9月&#xff0c;京东吸尘器的销量为19万&#xff0c;环比下滑约12%&#xff0c;同比下滑约25%&#xff1b;销售额为1.2亿&#xff0c;环比下滑约11%&…...

基于springboot实现休闲娱乐代理售票平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现休闲娱乐代理售票平台系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把休闲娱乐代理售票管理与现在网络相结合&#xff0c;利用java技术建设休闲娱乐代理售票系统&#xff0c;实现休闲娱乐代理售票的信息化。则对于进一步提高休闲娱乐代理售票管…...

jvm对象内存划分

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

网络原理之TCP/IP

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

Docker:数据卷挂载

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

你会处理 go 中的 nil 吗

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

高级深入--day42

注意&#xff1a;模拟登陆时&#xff0c;必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态 COOKIES_ENABLED True 或 # COOKIES_ENABLED False 策略一&#xff1a;直接POST数据&#xff08;比如需要登陆的账户信息) 只要是需要提供post数据的&#xff…...

mysql 计算两个坐标距离

方式一&#xff1a;st_distance_sphere 计算结果单位米 SELECT *, st_distance_sphere(point(lng,lat),point(lng,lat)) as distance FROM table mysql 版本5.7 以上 方式二&#xff1a;st_distance 计算结果单位是度 SELECT *, (st_distance(point(lng,lat),point(lng4,lat…...

String、StringBuffer、StringBuilder和StringJoiner

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

【数据结构】插入排序

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 直接插入、希尔排序 1. 什么是排序2…...

Photoshop使用笔记总目录

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

最近面试遇到的高频面试题

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

负载均衡有哪些算法,分别在nginx中如何配置?

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

Starknet开发工具

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

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...