STL算法学习小结

52、基于格的具有解密密钥暴露抗性的可撤销(分层)身份基加密方案 本文提出了首个基于格的具有解密密钥暴露抗性(DKER)的可撤销分层身份基加密(RHIBE)方案。通过引入分层密文、分层解密密钥和级别转换密钥等创新工具,克服了格结构与传统密钥重新随机化属性不匹配的难题。该方案不仅支持可扩展的密钥撤销机制,还具备密钥委托功能,为后量子密码学领域的发展提供了新的思路和方法。 阅读详情

(转载)STL算法学习,小结如下:

前提:

下载stl源码:  http://www.sgi.com/tech/stl/download.html
打开网页:     http://www.sgi.com/tech/stl/stl_index.html

一   函数对象: 因为很多的算法中多使用了函数对象


二元函数对象,V1和V2为输入,V3为结果

plus<T>:
  transform(V1.begin(), V1.end(), V2.begin(), V3.begin(),plus<double>());

其他的二元函数对象:minus,multiples,divieds,modulus.

二元断言函数对象,使用时需要bind2nd()或bind1st()来绑定比较对象。

less<T>:
  find_if(L.begin(), L.end(), bind2nd(less<int>(), 0));

其他的二元断言函数:equal_to,notequal_to,greater,greater_equal,less_equal,logical_and,logical_or

二元逻辑函数

binary_negate:
const char* wptr = find_if(str, str + MAXLEN,
                           compose2(not2(logical_or<bool>()),
                                    bind2nd(equal_to<char>(), ' '),
                                    bind2nd(equal_to<char>(), '/n')));

一元函数对象

negate:
transform(V1.begin(), V1.end(), V2.begin(),
          negate<int>());

一元断定函数对象

logical_not:
  transform(V.begin(), V.end(), V.begin(), logical_not<bool>());

一元逻辑函数

unary_negate:


二   函数对象发生器:主要用来填充序列。


产生不重复的随机数:
// Generate unique random numbers from 0 to mod:
class URandGen {
  std::set<int> used;
  int limit;
public:
  URandGen(int lim) : limit(lim) {
    srand(time(0));
  }
  int operator()() {
    while(true) {
      int i = int(rand()) % limit;
      if(used.find(i) == used.end()) {
        used.insert(i);
        return i;
      }
    }
  }
};

const int sz = 10;
const int max = 50;
vector<int> x(sz), y(sz), r(sz);
//An integer random number generator:
URandGen urg(max);
generate_n(x.begin(), sz, urg);

三 函数对象适配器 : 将函数转化为函数对象

ptr_fun:一般函数适配器

一元实例:
transform(first, last, first,
          compose1(negate<double>, ptr_fun(fabs)));

二元实例:
list<char*>::iterator item =
              find_if(L.begin(), L.end(),
                      not1(binder2nd(ptr_fun(strcmp), "OK")));

not1:对一元的断定函数对象取反的适配器。

not2: 对二元的断定函数对象取反的适配器。

mem_fun与mem_fun_ref:类成员函数的适配器,区别是一个需要指针,而另一个仅需要一般对象。如下:
shape是一个指针变量,则foreach(v.begin(),v.end(),mem_fun(&shape::draw));
但如果shape是一般的变量,不是指针,则foreach(v.begin(),v.end(),mem_fun_ref(&shape::draw));

四   算法:

拷贝:
copy()
reverse_copy()
rotate_copy()
remove_copy()  拷贝不等于某值的元素到另一个序列。
remove_copy_if() 拷贝符合条件的到另一个序列。

填充和生成:
fill()
fill_n() 填充序列中的n个元素。
generate()为序列中的每个元素调用gen()函数。

排列:
next_permuttion() 后一个排列。
prev_permutation()

partition() 划分,将满足条件的元素移动到序列的前面。
stable_partition()

查找和替换:
find()
binary_search() 在一个已经有顺序的序列上查找。
find_if()
search() 检查第二个序列是否在第一个序列中出现,且顺序相同。

删除:注意必须调用erase()来真正删除
remove()
unique()删除相邻重复元素,最好现排序。

合并序列:
merge()

数值算法:
accumulate() 对序列的每个元素进行运算后求和。
transform() 也可以对每个元素进行运算。
计数:
size()总个数。
count()等于某值的元素个数。

adjacent_difference 序列中的后一个减前与他相邻的前一个得到新的序列。

adiacent_find

五   所有的算法:

     accumlate : iterator 对标志的序列中的元素之和,加到一个由 init 指定的初始值上。重载的版本不再做加法,而是传进来的二元操作符被应用到元素上。
adjacent_different
:创建一个新序列,该序列的每个新值都代表了当前元素与上一个元素的差。重载版本用指定的二元操作计算相邻元素的差。
adjacent_find
:在 iterator 对标志的元素范围内,查找一对相邻的重复元素,如果找到返回一个 ForwardIterator ,指向这对元素的第一个元素。否则返回 last 。重载版本使用输入的二元操作符代替相等的判断。
binary_search
:在有序序列中查找 value ,如果找到返回 true 。重载的版本使用指定的比较函数对象或者函数指针来判断相等。
copy
:复制序列。
copy_backward
:除了元素以相反的顺序被拷贝外,别的和 copy 相同。
count
:利用等于操作符,把标志范围类的元素与输入的值进行比较,并返回相等元素的个数。
count_if
:对于标志范围类的元素,应用输入的操作符,并返回结果为 true 的次数。
equal
:如果两个序列在范围内的元素都相等,则 equal 返回 true 。重载版本使用输入的操作符代替了默认的等于操作符。
equal_range
:返回一对 iterator ,第一个 iterator 表示由 lower_bound 返回的 iterator ,第二个表示由 upper_bound 返回的 iterator 值。
fill
:将输入的值的拷贝赋给范围内的每个元素。
fill_n
:将输入的值赋值给 first 到 frist+n 范围内的元素。
find
:利用底层元素的等于操作符,对范围内的元素与输入的值进行比较。当匹配时,结束搜索,返回该元素的一个 InputIterator 。
find_if
:使用输入的函数替代了等于操作符执行了 find 。
find_end
:在范围内查找“由输入的另外一个 iterator 对标志的第二个序列”的最后一次出现。重载版本中使用了用户输入的操作符替代等于操作。
find_first_of
:在范围内查找“由输入的另外一个 iterator 对标志的第二个序列”中的任意一个元素的第一次出现。重载版本中使用了用户自定义的操作符。
for_each
:依次对范围内的所有元素执行输入的函数。
generate
:通过对输入的函数 gen 的连续调用来填充指定的范围。
generate_n
:填充 n 个元素。
includes
:判断 [first1, last1) 的一个元素是否被包含在另外一个序列中。使用底层元素的 <= 操作符,重载版本使用用户输入的函数。
inner_product
:对两个序列做内积 ( 对应的元素相乘,再求和 ) ,并将内积加到一个输入的的初始值上。重载版本使用了用户定义的操作。
inner_merge
:合并两个排过序的连续序列,结果序列覆盖了两端范围,重载版本使用输入的操作进行排序。
iter_swap
:交换两个 ForwardIterator 的值。
lexicographical_compare
:比较两个序列。重载版本使用了用户自定义的比较操作。
lower_bound
:返回一个 iterator ,它指向在范围内的有序序列中可以插入指定值而不破坏容器顺序的第一个位置。重载函数使用了自定义的比较操作。
max
:返回两个元素中的较大的一个,重载版本使用了自定义的比较操作。
max_element
:返回一个 iterator ,指出序列中最大的元素。重载版本使用自定义的比较操作。
min
:两个元素中的较小者。重载版本使用自定义的比较操作。
min_element
:类似与 max_element ,不过返回最小的元素。
merge
:合并两个有序序列,并存放到另外一个序列中。重载版本使用自定义的比较。
mismatch
:并行的比较两个序列,指出第一个不匹配的位置,它返回一对 iterator ,标志第一个不匹配的元素位置。如果都匹配,返回每个容器的 last 。重载版本使用自定义的比较操作。
next_permutation
:取出当前范围内的排列,并将其重新排序为下一个排列。重载版本使用自定义的比较操作。
nth_element
:将范围内的序列重新排序,使所有小于第 n 个元素的元素都出现在它前面,而大于它的都出现在后面,重载版本使用了自定义的比较操作。
partial_sort
:对整个序列做部分排序,被排序元素的个数正好可以被放到范围内。重载版本使用自定义的比较操作。
partial_sort_copy
:与 partial_sort 相同,除了将经过排序的序列复制到另外一个容器。
partial_sum
:创建一个新的元素序列,其中每个元素的值代表了范围内该位置之前所有元素之和。重载版本使用了自定义操作替代加法。
partition
:对范围内元素重新排序,使用输入的函数,把计算结果为 true 的元素都放在结果为 false 的元素之前。
prev_permutation
:取出范围内的序列并将它重新排序为上一个序列。如果不存在上一个序列则返回 false 。重载版本使用自定义的比较操作。
random_shuffle
:对范围内的元素随机调整次序。重载版本输入一个随机数产生操作。
remove
:删除在范围内的所有等于指定的元素,注意,该函数并不真正删除元素。内置数组不适合使用 remove 和 remove_if 函数。
remove_copy
:将所有不匹配的元素都复制到一个指定容器,返回的 OutputIterator 指向被拷贝的末元素的下一个位置。
remove_if
:删除所有范围内输入操作结果为 true 的元素。
remove_copy_if
:将所有不匹配的元素拷贝到一个指定容器。
replace
:将范围内的所有等于 old_value 的元素都用 new_value 替代。
replace_copy
:与 replace 类似,不过将结果写入另外一个容器。
replace_if
:将范围内的所有操作结果为 true 的元素用新值替代。
replace_copy_if
:类似与 replace_if ,不过将结果写入另外一个容器。
reverse
:将范围内元素重新按反序排列。
reverse_copy
:类似与 reverse ,不过将结果写入另外一个容器。
rotate
:将范围内的元素移到容器末尾,由 middle 指向的元素成为容器第一个元素。
rotate_copy
:类似与 rotate ,不过将结果写入另外一个容器。
search
:给出了两个范围,返回一个 iterator ,指向在范围内第一次出现子序列的位置。重载版本使用自定义的比较操作。
search_n
:在范围内查找 value 出现 n 次的子序列。重载版本使用自定义的比较操作。
set_difference
:构造一个排过序的序列,其中的元素出现在第一个序列中,但是不包含在第二个序列中。重载版本使用自定义的比较操作。
set_intersection
:构造一个排过序的序列,其中的元素在两个序列中都存在。重载版本使用自定义的比较操作。
set_symmetric_difference
:构造一个排过序的序列,其中的元素在第一个序列中出现,但是不出现在第二个序列中。重载版本使用自定义的比较操作。
set_union
:构造一个排过序的序列,它包含两个序列中的所有的不重复元素。重载版本使用自定义的比较操作。
sort
:以升序重新排列范围内的元素,重载版本使用了自定义的比较操作。
stable_partition
:与 partition 类似,不过它不保证保留容器中的相对顺序。
stable_sort
:类似与 sort ,不过保留相等元素之间的顺序关系。
swap
:交换存储在两个对象中的值。
swap_range
:将在范围内的元素与另外一个序列的元素值进行交换。
transform
:将输入的操作作用在范围内的每个元素上,并产生一个新的序列。重载版本将操作作用在一对元素上,另外一个元素来自输入的另外一个序列。结果输出到指定的容器。
unique
:清除序列中重复的元素,和 remove 类似,它也不能真正的删除元素。重载版本使用了自定义的操作。
unique_copy
:类似与 unique ,不过它把结果输出到另外一个容器。
upper_bound
:返回一个 iterator ,它指向在范围内的有序序列中插入 value 而不破坏容器顺序的最后一个位置,该位置标志了一个大于 value 的值。重载版本使用了输入的比较操作。
堆算法: C++ 标准库提供的是 max-heap 。一共由以下 4 个泛型堆算法。
make_heap
:把范围内的元素生成一个堆。重载版本使用自定义的比较操作。
pop_heap
:并不是真正的把最大元素从堆中弹出,而是重新排序堆。它把 first 和 last-1 交换,然后重新做成一个堆。可以使用容器的 back 来访问被“弹出“的元素或者使用 pop_back 来真正的删除。重载版本使用自定义的比较操作。
push_heap
:假设 first 到 last-1 是一个有效的堆,要被加入堆的元素在位置 last-1 ,重新生成堆。在指向该函数前,必须先把元素插入容器后。重载版本使用指定的比较。
sort_heap
:对范围内的序列重新排序,它假设该序列是个有序的堆。重载版本使用自定义的比较操作。

出自:http://www.cppblog.com/mzty/archive/2007/03/14/19819.html

STM32入门教程:图像处理 然后,我们使用 STM32 的 DSP 模块中的 arm_mean_u8 函数计算原始图像的平均值,并将结果存储在 meanValue 变量中。然后,我们需要编写代码配置 STM32 的外部中断输入引脚,并在中断处理函数中读取 OV7670 摄像头模块输出的图像数据。然后,我们需要编写代码配置 STM32 的 USB OTG 接口,并在回调函数中读取 USB 摄像头输出的图像数据。一、图像采集 图像采集是图像处理的第一步,我们需要将外部图像源的数据导入到 STM32 中进行处理。 阅读详情

相关推荐

SoC芯片时钟树优化实战:如何用分段CTS解决DDRPHY与Memory Controller的时序难题

本文深入探讨了SoC芯片时钟树优化中的分段CTS技术,重点解决DDRPHY与Memory Controller之间的时序难题。通过分析多域时钟架构的复杂性,提出三级分段CTS策略,并结合28nm移动SoC实战案例,展示如何通过Guide Buffer插入和本地段重构实现72%的跨域偏差改善。文章还涵盖5nm以下工艺的线阻变异、热梯度效应等特殊考量,为数字IC设计提供时钟树综合的高阶解决方案。

kkk56的博客 905

algorithm.h 中的一些很好用的函数

string str; int nums[n]; 注意:除了swap, 下面所有函数的参数均为指针类型,且末指针是操作区域末尾再后面一位的指针。可以用p+a来作为下标使用。 reverse(str.begin(),str.end()) 实现字符串的全部翻转;reverse(arr.begin(),arr.end()) 实现STL数组的翻转; reverse(str.begin()+a,str...

sinat_38972110的博客 2428

无人机+消防车:高楼灭火系统技术详解

传统的消防设备,如登高车、车载水枪、水炮和高喷车,在50米以上高度的火源面前往往力不从心,100米以上高层火灾则更加依赖消防员“爬楼”灭火,效率低下且风险极高。消防水带:采用聚乙烯丝材质,超轻、耐腐蚀、强度高,能够携带大量水或灭火泡沫进行高空喷水灭火作业。“无人机+消防车”高楼灭火系统主要由消防车和无人机两部分组成,通过机车联动实现高效灭火。高效灭火:无人机能够快速到达高层建筑顶部或指定位置进行灭火作业,大大提高了灭火效率。空压泡沫系统:配备超大水箱,支持长时间供应灭火泡沫,满足无人机灭火剂的需求。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1671

C++ STL 总结(algorithm.h)

algorithm max()、min()、abs() 参数必须是两个,如果要三者最大值,可使用max(x,max(y,z)) abs() 只适用int; fabs() 浮点型 swap(x,y) reverse() reverse(it,it2) 将数组指针在[it,it2)之间的元素或容器的迭代器进行反转 next_permutation() 给出全排列中的下一排列,用法如下: i...

jyc1020的博客 3998

RADIOML 2018.01A数据集在自动调制识别中的实战应用指南

本文提供了RADIOML 2018.01A数据集在自动调制识别(AMR)任务中的完整实战指南。内容涵盖从数据集介绍、数据获取与解包、高效预处理流程,到构建PyTorch数据管道、模型设计(如1D CNN、ResNet)以及训练调参策略。重点阐述了如何利用该数据集训练鲁棒的AI模型,以应对复杂信道环境和低信噪比挑战,并给出了详细的性能评估方法。

plant的博客 173

Android GWP-Asan机制详解

基本用途:GWP-ASan是一种原生内存分配器功能,在内存分配时额外记录一些信息,用于检测DOUBLE_FREE、USE_AFTER_FREE、INVALID_FREE、BUFFER_OVERFLOW、BUFFER_UNDERFLOW五种内存错误问题。

专注于系统快稳省领域 4143

【我的C/C++语言学习进阶之旅】解决使用algorithm库里面的sort函数的时候,编译报错:未能使函数模板“unknown-type std::less<void>::operator ()

一、问题描述 定义了一个struct结构体如下所示: struct Review { string title; int rating; }; 测试它 #include <iostream> #include <string> #include <vector> #include <algorithm> struct Review { string title; int rating; }; int main() { test_vector3

字节卷动 3094

华为od 面试八股文_C++_02_含答案

华为od 面试八股文_C++_02_含答案

MISAYAONE的博客 3121

C++11编程algorithm常用的函数

lower_bound():在有序容器中查找第一个大于等于指定元素的位置,返回指向该位置的迭代器。声明变量时,编译器会根据变量的初始值自动推导出变量的类型,从而避免了手动指定类型所带来的繁琐。,其中 container 为有序容器名称,value 为要查找的元素。find():在容器中查找指定元素,返回指向该元素的迭代器。,其中 container 为容器名称,value 为要查找的元素。sort():对容器中的元素进行排序,可以自定义排序规则。reverse():对容器中的元素进行翻转。

m0_58388558的博客 260

提升YOLOv8性能:用Swin Transformer替换Backbone的详细实现与分析【YOLOv8】

YOLOv8作为目标检测领域的最新版本,在速度和精度之间取得了良好的平衡。然而,随着计算机视觉任务的复杂性不断增加,YOLOv8的标准主干网络(Backbone)在处理高分辨率图像或多尺度目标时,可能存在一定的局限性。为了进一步提升YOLOv8的性能,我们可以引入Swin Transformer替换其主干网络,以增强模型的全局感知能力和多尺度特征提取能力。本文将详细介绍如何在YOLOv8中用Swin Transformer替换原有的Backbone,提供代码示例,并深入探讨其中的原理和效果。

博客 1717

fasterlio原理及代码框架梳理

Faster-LIO 的优势是在保持同等高精度的前提下,显著提升计算效率,以支持更极端的应用场景(如高速无人机)和更廉价的硬件平台。可以把 Faster-LIO 理解为用一把更快的“空间哈希筛子”(iVox)替换了原来精细的“动态平衡树”(ikd-Tree),从而在精度损失极小的情况下,实现了效率的显著提升。:只在实际有地图点的空间区域动态创建和保留体素单元,形成一个稀疏的体素地图。是关键:将去畸变点云中的每个点,在 iVox 维护的局部地图中搜索近邻(如5个最近点),构建点到面的距离残差。

Studying…… 246

C++ algorithm头文件中函数的基本用法

【代码】C++ algorithm头文件中函数的基本用法。

科研小白一枚~ 愿上天不会辜负每一个努力的菜鸟! 289

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STL算法学习小结(转)

<br />(转载)STL算法学习,小结如下:<br />前提:<br />下载stl源码:  http://www.sgi.com/tech/stl/download.html<br />打开网页:     http://www.sgi.com/tech/stl/stl_index.html<br />一   函数对象: 因为很多的算法中多使用了函数对象<br /><br />二元函数对象,V1和V2为输入,V3为结果<br />plus<T>:<br />  transform(V1.begin(),

liusoftware5的专栏 549

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

STL算法学习,小结如下:

STL算法学习,小结如下:前提:下载stl源码: http://www.sgi.com/tech/stl/download.html 打开网页:     http://www.sgi.com/tech/stl/stl_index.html一   函数对象: 因为很多的算法中多使用了函数对象 二元函数对象,V1和V2为输入,V3为结果plus: transfo

青青的专栏--C/C++ OOA/D Design Pattern 700

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

c++学习小结(11.7 初识STL,六大组件容器 算法 迭代器vector)

STL中最常用的容器为Vector,可以理解为数组,下面我们将学习如何向这个容器中插入数据,并遍历这个容器。提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。质变算法:是指运算过程中会更改区间内的元素的内容,例如拷贝,替换,删除等等。:容器,算法,迭代器,仿函数,适配器,空间适配器。有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法。常用的容器中迭代器种类为双向迭代器,和随机访问迭代器。

weixin_66455428的博客 180

第六章学习小结_初识图

第六章学习小结_初识图 第六章学习小结_初识图 存储结构及搜索 第六章开始学习的图,是多对多的新的数据结构。 图本身不难理解,但是基于图有很多存储方式和操作,比较容易混淆。 对于存储方式,主要学习了邻接矩阵和邻接表。邻接矩阵在处理稀疏图的时候导致大量空间浪费,因此局限比较大,但如果是在PTA上解题,邻接矩阵是一个不错的方法,操作简单且容易理解。...

weixin_33774308的博客 172

STL学习小结

STL总结

深之JohnChen的专栏 7万+

STL小结

STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同...

TwcatL 1335

STL学习小结(原创:桑英硕 )

提供了类型安全、高效而易用特性的STL无疑是最值得C++程序员骄傲的部分。每一个C++程序员都应该好好学习STL:).   STL(Standard Template Library 标准模板库)是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同时开始开发的;一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后他们选择了C++,

风雨飘摇 2295

C++——STL排序算法介绍

对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的bug中。这时,你想找一种工具,已经帮你实现这些功能,你想怎么用就怎么用,同时不影响性能。你需要的就是STL

shineHoo的专栏 1万+

STL技术文章不完全列表(STL学习使用指南)

STL技术文章不完全列表(STL学习使用指南) 作者:Winter来源: 最优秀的STL学习网站 STL技术文章不完全列表(STL学习使用指南) 1 STL入门教程: 2 STL 容器: 3 STL应用: 4 STL其他:  在网络上,关于STL使

Lee的专栏 2231
上一篇: C++ STL 堆的相关操作
下一篇: STL算法学习小结(转)
liusoftware5
博客等级 码龄16年 1粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值