
C++ STL
文章平均质量分 73
C++标准库
yangSHU21
这个作者很懒,什么都没留下…
展开
-
STL六大组件介绍
STL(Standard Template Library),即标准模板库,是一个高效的C++程序库。包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)。从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的。转载 2023-07-04 16:29:43 · 341 阅读 · 3 评论 -
C++标准程序库中的基本概念
如果你在namespace之内定义所有标识符号,则namespace本身名称就成了唯一可能与其它全局符号冲突的标识符号,必须在标识符号前加上namespace名字,才能援引该namespace内的符号。迭代器的主要好处是为所有容器提供一组很小的公共接口,利用该接口,某操作就可以行进至群集内的下一个元素。然而,它允许你将各种容器与各种算法结合起来,在很小的框架内拥有非常大的弹性。当你采用不同的模块和程序库时,经常会出现名称冲突现象,这是因为不同的模块和程序库可能针对不同的对象使用相同的标识符。原创 2023-07-04 16:16:22 · 251 阅读 · 0 评论 -
C++两个区间的比较?——STL之equal()算法和mismatch()算法
第一次调用mismatch()用以搜寻第一对互异的对应元素,如果找到了就把它们的值写到标准输出装置。第二次调用用来搜寻符合以下条件的第一对元素,“第一序列的元素比第二序列的对应元素大”,找到后返回这两个元素。下面用一个例子展示equal()算法两种形式的用法。原创 2023-05-08 16:30:45 · 904 阅读 · 0 评论 -
STL之search()算法
两种形式都返回区间[beg,end)之中“和区间[searchBeg,searchEnd)完全吻合”的最后一个子区间内的第一个元素位置第一形式中,子区间的元素必须完全等于[searchBeg,searchEnd)的元素第二形式中,子区间的元素和[searchBeg,searchEnd)的对应元素必须造成以下二元判断式的结果为true: op(elem,searchElem)如果没有找到符合条件的子区间,两种形式都返回endop在函数调用过程中不应该改变自身状态。原创 2023-05-08 14:23:17 · 569 阅读 · 0 评论 -
C++怎样查找序列中是否包含某一个元素?STL之find()算法
假如现在有一个val=5,我想看看某一段序列中是否包含了这个val,应该怎么做呢?STL又提供了find()算法供我们使用,下面我们来介绍一下这个算法。下面这个程序展示find_if()的用法,以特定的搜寻准则来搜寻某个元素。原创 2023-05-07 19:02:45 · 655 阅读 · 0 评论 -
怎样求一个序列中的最大值和最小值?——用STL的max_element()和min_element()
假设现在有一个序列我们怎么找出这个序列中的最小值和最大值呢?正如标题所言,STL提供了算法帮助我们解决这个问题。下面我们将介绍这两种算法。需要注意的是这两个算法分别返回最大和最小元素的位置,所以要输出相应的值就必须使用一元运算符operator*来打印其值。下面我们来看一下程序,找到col中的最小元素和最大元素,并通过absLess()输出最小元素和最大元素的绝对值。原创 2023-05-07 14:40:42 · 424 阅读 · 0 评论 -
Valarrays
C++标准库提供了一个class valarray用以进行数值数组的运算。它声明于头文件<valarray>如果你,它将被视为valarray的大小,各元素则以其型别的缺省构造函数加以初始化。如果元素是基本型别,初值就是0。如果,那么第一个参数就是元素初值,第二个参数就是元素个数。注意这里的行为和C++标准程序库的其他class的习惯不同,所有STL容器都是把第一参数视为元素个数,第二参数视为元素初值。原创 2023-05-03 16:15:30 · 205 阅读 · 0 评论 -
STL中特殊容器
它的接口和queues非常接近。但是要注意的是priority queue中的元素已经根据其值进行了排序,你可以通过template参数指定一个排序准则,缺省的排序准则是利用operator<形成降序排列。在元素 66.6,22.2,44.4被置入后,程序打印出优先级最高的元素66.6和44.4,另外三个元素被置入以后,priority queue内含22.2 ,11.1 ,55.5 ,33.3(按照插入次序),下一个元素被pop()掉了,所以最后一个循环依次打印出33.3 ,22.2 , 11.1。原创 2023-05-02 16:06:27 · 115 阅读 · 0 评论 -
STL组件之——算法
为了处理容器内的元素,STL提供了一些标准算法,包括搜寻、排序、拷贝、重新排序、修改、数值运算等,算法并非容器类别的成员函数,而是一种搭配迭代器使用的全局函数,这么做有一个优势:所有算法只需实作出一份,就可以对所有容器运作,不必为每一种容器量身定制。STL算法采用覆盖模式而非安插模式,所以调用者必须保证目标区间有足够多的元素空间。原创 2023-04-30 18:47:08 · 93 阅读 · 0 评论 -
STL中怎样给一个区间赋值?
第一次调用展示了如何使用fill_n()打印特定数量的值,其他的操作则是展示了怎样在string list中安插和替换元素。原创 2023-04-29 14:59:29 · 290 阅读 · 0 评论 -
STL之swap_ranges()算法【交换两区间内的元素】
第一次调用swap_ranges()是将col1和col2中对应位置的元素交换,col2中剩余位置处的元素保持不变。第二次调用swap_ranges()是将col1的前三个元素和后三个元素交换。原创 2023-04-29 13:14:53 · 127 阅读 · 0 评论 -
STL合并元素之merge()算法
set_difference()算法是求只存在于第一序列而不存在于第二序列中的元素,对于两个序列的重复元素,最终目标区间的个数=第一序列该元素个数-第二序列该元素个数,如果结果为负,则目标区间不存在该元素,(,对于重复元素的处理办法是,找两个区间内对应重复元素多的,比如例子中c1序列有两个元素”2“,c2序列有3个元素”2“,则最终目标序列就有3个”2“元素。两个已序区间内的所有元素,最终得到的目标区间元素个数一定是两个源区间元素个数的和。(准确的说应该是得到两个已序区间内的所有元素)原创 2023-04-29 12:41:02 · 702 阅读 · 0 评论 -
STL之transform()算法
其中包含的头文件 algostuff.h为 (包含了几个常用的操作,避免重复编写的麻烦)1.第一形式有4个参数。把源区间的元素转换到目标区间(转换的意思包含了复制和修改)2.第二形式有5个参数,将前两个源序列中的元素合并,并将结果写入目标区间。算法transform()提供两种能力。原创 2023-04-27 12:37:05 · 342 阅读 · 0 评论 -
STL之copy()算法
back_inserter用于在末尾插入元素,其设计目的是避免容器中的原始元素被覆盖,在容器的末尾自动插入新元素。这一句代码的意思就是在col2的末尾添加元素,这些元素是从col1中col1.begin()至col1.end()中复制过来了,通过打印col2中的元素我们也可以看出来这一点。对于copy和copy_backward这两个算法,它们都是将区间[sourceBeg,sourceEnd)中的元素复制到以destBeg为起点或以destEnd为终点的目标区间去。原创 2023-04-27 09:28:56 · 154 阅读 · 0 评论 -
STL中的for_each()算法
不用定义函数的返回类型,因为返回类型就是这个函数的名字,例如我们上面写到的MeanValue类,for_each(),从它的名称可以大概猜测出它的作用,对每个元素执行某操作。书上写的是“它将调用者提供的操作施加于每一个元素身上”。将Print()传给for_each,使得for_each()对每一个元素调用Print(),从而打印所有元素。这个其实也是一个操作符重载,但是它看起来和我们平常见到的不一样,这是一个类型转换用到的。for_each()算法非常灵活,它可以用不同的方式存取、处理、修改每一个元素。原创 2023-04-26 16:32:09 · 225 阅读 · 0 评论 -
STL组件之——迭代器
当然我们也可以使用非常量迭代器,这时迭代器是非常量类型的、元素类型也是非常量类型的,我们就可以对容器中的元素进行修改。所有容器类别都提供一些成员函数,使我们得以获得迭代器并以之访问所有元素,其中最重要的两个函数是。迭代器是一个”可遍历STL容器内全部或部分元素“,一个迭代器用来指出容器中的一个特定位置。返回一个迭代器,指向容器起始点,也就是第一元素的位置;返回一个迭代器,指向容器最后一个元素的下一个位置;operator==和operator!这里我们将上一个程序的输出全部变为大写。原创 2023-04-18 14:22:12 · 1544 阅读 · 0 评论 -
STL组件之——容器
①容器containers,用来管理某类对象的集合,为了应对不同的需求,STL 准备了不同的容器类型。② 迭代器Iterators,用来在一个对象群集的元素上进行遍历动作。迭代器的主要好处是为所有容器提供了一组很小的公共接口,利用这个接口,某项操作就可以进行至群集内的下一个元素。③算法Algorithm,用来处理集群内的元素,可以出于不同的目的使用那些元素。通过迭代器的帮助,只需要撰写一次算法,就可以将它应用在任意容器上。原创 2023-04-18 14:12:09 · 339 阅读 · 0 评论 -
智能指针auto_ptr
①某函数是数据的终点。如果auto_ptr以传值的方式被当作一个参数传递给某函数,此时被调用端的参数获得了这个auto_ptr的拥有权,如果函数不再将它传递出去,它所指的对象就会在函数退出时被删除。一个auto_ptr不能指向另一个auto_ptr所拥有的对象,否则,当第一个指针删除该对象后,另一个指针就会指向一个已经被销毁的对象,此时如果再使用那个指针进行读写操作,就会引发错误。auto_ptr界定的是一种严格的拥有权观念,绝对不允许出现多个auto_ptr同时拥有一个对象的情况。②某函数是数据的起点。原创 2023-04-17 19:23:39 · 182 阅读 · 0 评论 -
C++ pair的学习记录
C++标准程序库内多处使用了这个struct,尤其在容器map和multimap,就是使用pair来管理其键值/实值的成对元素。除此之外,任何函数需要返回两个值,也需要pair。假如两个pair对象进行比较时,第一元素不相等,其比较结果就成为整个比较的结果;如果第一元素相等,继续比较第二元素,并把比较结果作为整体比较结果。这里我们将前面提到的概念应用起来编写一段程序(源自于c.plusplus.com)我们就是利用了上述default构造函数以int(),float()来初始化p。原创 2023-04-15 11:10:15 · 160 阅读 · 0 评论 -
C++ STL标准库学习记录----搜寻算法(find()与find_if())
接下来将展示find_if()的用法,从该算法的名称中我们大致可以推断出它的含义以及使用方法(我们在上一程序的基础上进行修改)成功找出元素4,这里需要注意的是find()返回的是一个迭代器,所谓迭代器就是一个智能指针,所以最后一行不能直接写。:调用find()时,使用了一个以bin2nd配接器组合而成的简单仿函数,搜寻第一个大于3的元素。同样的也有使用bin1st配接器组合而成的仿函数,表示绑定第一个参数的意思。如果没有找到匹配元素,两种形式都返回end。表示的是,大于第二个参数3的元素。原创 2023-04-12 19:28:06 · 151 阅读 · 1 评论 -
C++ STL标准库学习记录----for_each算法与count算法
编写如下的程序,用数组初始化vector容器,并编写一个仿函数,该仿函数的功能是计算每个输入元素的平方并输出。算法,但与前者不一样的是,后者返回满足某一准则(条件)的元素个数。编写如下程序,统计v中大于5的元素的个数。用for_each()对区间内的每一个元素进行操作,该操作可能会导致元素值变动。可以看到程序返回正确结果,vector中元素1有两个。在上述程序的基础上,可以进一步实现count()算法.算法,它将调用者提供的操作施加于每一个元素身上。用for_each()来打印区间内的每一个元素。原创 2023-04-12 16:42:24 · 159 阅读 · 1 评论