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算法的源码,在剖析源码的同时会给出一些例子,这样加深对其理解,方便我们对这些算法的使用。 阅读详情

相关推荐

组合导航、惯导、GNSS、INS、IMU的区别

‌:惯性导航系统(INS)是一种利用安装在运载体上的陀螺仪和加速度计来测定运载体位置的系统。它通过测量物体的加速度和角速度,结合算法计算出物体的位置、速度和姿态‌12。‌。

wynn1123的博客 8054

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

使用spacy规则化提取自然语言文本信息

1. 安装spacy pip install spicy spicy还需要载入文本库,使用pip的下载方式: python3 -m spacy download en_core_web_sm 但是很有可能因为网络问题下载速度非常缓慢,所以可以选择到github上去直接下载(注意和自己的spacy版本匹配):github下载链接 下载*.tar.gz文件即可。 然后切换到下载路径, pip install en_core_web_sm-3.1.0.tar.gz 2. spacy的一些基础用法 使用spa

六六六六神的博客 1818

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

UE4 GamePlay框架深度解析:从蓝图到C++构建多人游戏核心

在游戏开发与实时交互应用领域,一套清晰、可扩展的底层框架是项目成功的关键。GamePlay框架作为虚幻引擎(UE4/UE5)的核心架构,定义了游戏世界中对象交互、状态管理与网络同步的基本原理。它通过职责分离的设计模式,将游戏规则(GameMode)、全局状态(GameState)、玩家状态(PlayerState)、可操控实体(Pawn/Character)及其控制器(Controller)等核心类有机组织起来,确保了逻辑的清晰性与多人游戏数据的一致性。其技术价值在于为开发者提供了一套经过验证的最佳实践,大

weixin_33924770的博客 620

揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程

本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。

weixin_29296241的博客 526

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

饥荒联机版Mod开发——modmain环境与API深度解析

本文深入解析饥荒联机版Mod开发中的modmain.lua环境与核心API,详细讲解环境表构建原理、API注册与调用时机,并提供高级开发技巧与最佳实践。通过源码分析和实际案例,帮助开发者掌握Mod开发核心技术,解决常见问题,提升开发效率与代码质量。

weixin_30312563的博客 434

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

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

m0_58388558的博客 260

STM32驱动GP2Y1010AU0F红外PM2.5传感器:从采样时序到浓度标定

在嵌入式环境监测项目中,模拟传感器输出信号的准确采集是系统可靠性的基石。许多工程师在接触红外散射式粉尘传感器时,常因不了解其特殊的脉冲驱动与采样保持机制,导致ADC读数异常。红外散射原理通过检测颗粒物散射光强来估算粉尘浓度,其输出信号并非稳定直流,而是与LED脉冲同步的短时窗口电压。理解这一时序特征,并掌握在STM32平台上通过定时器与ADC协同完成微秒级精准采样的方法,是获取有效数据的关键。该技术广泛应用于室内空气质量检测、空气净化器控制及DIY环境监测节点等场景。本文以GP2Y1010AU0F为例,详细

weixin_29159127的博客 283

【GEOS-Chem模拟教程第二期上】生物质燃烧排放 GFED4 数据配置

生物质燃烧排放 GFED4 数据配置

WW、forever的博客 1301

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

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

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

Diffusion models代码实战:从零搭建自己的扩散模型

这个系列曾经写过三篇文章专门讲代码,分别从数据集、超参数、loss设计、参数计算、Unet结构、正向过程、逆向过程等部分详细介绍了如何搭建DDPM。Diffusion models领域发展神速,最近半年代表作品有OpenAI的GLIDE、DALL-E 2,Google Brain的ImageGen,海森堡大学的Latent Diffusion。这篇博客针对入门新手讲解一下如何利用已有的资源快速搭建自己的Diffusion models。.........

沉迷单车的追风少年 1万+

STL学习小结

STL总结

深之JohnChen的专栏 7万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

STL算法大全

"STL算法大全"

热爱编程的小K的博客 2911

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[转] C++ STL详解

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

如梦如幻的博客 2万+

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

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

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、付费专栏及课程。

余额充值