STL算法学习小结(转)

IGS 转 STL 全攻略:迪威模型在线转码助力 3D 建模 面对 IGS 转 STL 过程中可能出现的种种问题,迪威模型在线转码平台提供了一站式解决方案。便捷的操作流程:用户只需在迪威模型在线转码平台上传 IGS 文件,选择转换参数,点击 “开始转换” 按钮,即可轻松完成 IGS 到 STL 的转换。平台会自动处理转换过程中的复杂操作,无需用户掌握专业的转换技术。高精度转换:迪威模型在线转码平台采用先进的转换算法,可在保证转换效率的同时,最大程度保留模型精度。通过合理设置公差参数,有效减少模型精度损失,满足不同用户对模型精度的要求。自动修复拓扑错误。 阅读详情

(转载)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

STL源码剖析——STL算法stl_algo.h 本文剖析的STL算法的源码,在剖析源码的同时会给出一些例子,这样加深对其理解,方便我们对这些算法的使用。 阅读详情

相关推荐

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

TFN_yzgd的博客 926

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

一个响应ping包延迟偏大的问题

前段时间客户反馈一个使用pc上的命令行ping无线设备(WiFi4)时,设备平均响应时间(测试时长2小时,1秒Ping一次)相比其它机型偏慢的问题,并上传上具体的时间的Log.从log中看到,大多数包的响应还是比较快的,只是个别响应时间较长,且响应时间长的包时间几乎都是一样的100多ms.如下是部分响应时间截图. 整个2小时的测试时间里,总是时不时的出这么上102,104ms的响应时间,这直接导致了平均响应时间被拉大.于是本地测试,也发现了类似的延迟.本地测试时,现象略有...

流风回雪的博客 1万+

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

Tomcat启动过程中cmd窗口(控制台)中文乱码的问题

tomcat启动时,启动过程日志中文乱码的处理方法。

寻码启示 1944

Vivado静态时序分析学习笔记(1)

静态时序分析分为片内时序分析(寄存器与寄存器之间的时序关系)和片外时序分析(IO时序分析)。(1)建立时间 setup time在时钟事件(上升沿/下降沿)发生之前数据信号应保持稳定的时间。把实际电路抽象成前级D触发器+组合逻辑+后级D触发器。

Fantaasky的博客 4376

【我的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

SAP 行业扫盲系列之一:SAP 从业者的分类

本文简单介绍了 SAP 从业者的分类,限于笔者狭隘的视角,可能存在遗漏或者不恰当的地方,希望大家在评论区指出。 那些在知乎咨询上向我提问关于进入 SAP 行业建议的朋友们,也请大家提问时注明自己想具体从事 SAP 行业哪一类的工作,这样才能得到更让你们满意的回复。感谢阅读。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1589

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

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

m0_58388558的博客 260

OD图 arcgis曲线制作插件 od图曲线 路径图曲线制作插件 航线图曲线制作插件

在ArcGIS 10.2 中导入节点数据,打开插件,选择输入起始节点和目标节点的节点文件Point,以Name字段(地名)为连接线的起始字段和目标字段,(Input Table File)选择连接关系表格SDLine.csv,(Origin Column 和 Destination Column)为起始节点和目标节点,(Output Path)为输出路径,应选择.gdb数据库路径,否则容易报错,(Chord Coefficient)为连线的曲率,数值越大,曲率越高。运行环境:ArcGIS10.2。...

JData_Engineer的博客 2670

SAP HANA 中的 Union Node Pruning:让 Calculation View 少走弯路的关键优化

摘要:SAP HANA的Union Node Pruning技术通过在执行前排除无关数据源来优化查询性能。该技术主要采用三种方式:Constant Mapping(适用于规则稳定的场景)、Pruning Configuration Table(灵活性高)和Column-Based Pruning(基于列可用性)。典型应用场景包括分层存储的数据查询,如区分当前和历史销售数据。需要注意的是,当查询发生Unfolding且不含聚合时,Pruning可能失效,此时可通过NO_CALC_VIEW_UNFOLDING提

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 875

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

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

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

Unity开发AR之Vuforia-MultiTarget笔记

在增强现实(AR)技术蓬勃发展的今天,越来越多的开发者开始探索如何将AR应用于各种场景中。Vuforia作为一个领先的AR开发平台,为开发者提供了强大的工具和功能,使得创建AR体验变得更加简单和直观。本文将为您介绍Vuforia的基本概念、特点,以及如何配置和使用MultiTarget功能,旨在帮助您更加深入地理解Vuforia SDK,并在您的项目中有效地应用。Vuforia是一个由PTC开发的增强现实SDK,它提供了丰富的功能,使团队能够在各种设备上创建互动的AR应用。

TxNet 1049

STL学习小结

STL总结

深之JohnChen的专栏 7万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

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

STL算法大全

"STL算法大全"

热爱编程的小K的博客 2911

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[转] C++ STL详解

转载自:https://www.cnblogs.com/CnZyy/p/3317999.html C++合理运用STL标准库是非常方便的,对数据结构和一些算法的学习也大有裨益。 事实上转载处也是转载自他处,但是感觉总结的很好,当然也同时感谢原创者。 互联网就是这么神奇的分享平台…… 目录  一、STL简介  二、算法 三、容器 四、迭代器 C++STL框架中常用函数 迭代器...

如梦如幻的博客 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

STL小结

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

TwcatL 1336

【C++】标准模板库(STL)—— 学习算法的利器

STL(Standard Template Library,标准模板库)是 C++ 标准库的重要组成部分,包含丰富的数据结构和算法,是现代 C++ 编程中必不可少的工具。本文将介绍 STL 的基本组成、学习重点以及学习 STL 前应具备的先修知识和学习路线,帮助你系统高效地掌握 STL。容器(Containers):用于存储和管理数据集合,例如vectorlistsetmap等。算法(Algorithms):提供排序、查找、遍历等通用操作函数。迭代器(Iterators)

Sagittarius_A*的博客 1270

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

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

风雨飘摇 2295

STL常见算法总结

一、各种常见算法的用法 accumlate : iterator 对标志的序列中的元素之和,加到一个由 init 指定的初始值上。重载的版本不再做加法,而是传进来的二元操作符被应用到元素上。adjacent_different :创建一个新序列,该序列的每个新值都代表了当前元素与上一个元素的差。重载版本用指定的二元操作计算相邻元素的差。adjacent_find :在 iterator 对标志的元素范围内,查找一对相邻的重复元素,如果找到返回一个 ForwardIterator ,指向这对元素的第一

sinat_31608641的博客 4819

STL算法之sort

STL所提供的各式各样算法中,sort()是最复杂最庞大的一个。这个算法接受两个RandomAccessIterators(随机存取迭代器),然后将区间内的所有元素以渐增方式由小到大重新排列。还有一个版本则是允许用户指定一个仿函数代替operator

chnming1987的博客 1627

【C++】STL 算法概念和分类 ( STL 算法头文件 | STL 算法思想 - 数据与算法分离 | STL 算法 迭代器 | STL 算法 操作对象 | STL 算法分类 )

一、STL 算法概念 1、STL 算法头文件 2、STL 算法思想 - 数据与算法分离 3、STL 算法 迭代器 4、STL 算法 操作对象 二、STL 算法分类

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1755

【STL学习指南】STL的入门学习指南

目录STL 学习指南一. STL基础二. C++ STL 容器1 序列式容器1.1 array三. C++ STL 迭代器 STL 学习指南 一. STL基础 C++ STL是什么?有什么用? C++ STL的发展历程是怎样的? C++ STL版本有哪些? C++ STL基本组成(6大组件+13个头文件) GNU开源精神及其发展历程 二. C++ STL 容器 C++ STL容器是什么? 1 序列式容器 C++序列式容器(STL序列式容器)是什么? 1.1 array 三. C++ STL 迭代

m0_51139226的博客 2030
上一篇: STL算法学习小结
下一篇: C++ STL plus,minus,multiplies,divides,negate用法
liusoftware5
博客等级 码龄16年 1粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值