首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么没有set_union等的便捷函数,它们采用容器类型而不是迭代器?

这个问题涉及到了C++标准库中的容器和迭代器的使用。在C++标准库中,有一些算法可以用于处理容器,例如std::set_union,它可以将两个有序的容器合并为一个有序的容器。然而,这个算法需要使用迭代器来访问容器中的元素,而不是直接使用容器类型。

这是因为容器类型可能有很多种,而迭代器是一种通用的访问方式,可以应用于各种容器类型。使用迭代器可以使算法更加通用,可以应用于各种容器类型,而不需要为每种容器类型都提供一个特定的版本。

此外,使用迭代器可以使算法更加灵活,因为它可以处理任何可以通过迭代器访问的序列,而不仅仅是容器。例如,可以使用迭代器来处理数组、字符串、容器等。

总之,std::set_union等算法使用迭代器而不是容器类型,是因为迭代器提供了更通用、更灵活的方式来处理序列。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

STL set

一个经过更正和更加实际定义应该是:一个集合(set)是一个容器,它其中所包含元素值是唯一。这在收集一个数据具体值时候是有用。集合中元素按一定顺序排列,并被作为集合中实例。...清除所有元素 count() 返回某个值元素个数 empty() 如果集合为空,返回true(真) end() 返回指向最后一个元素之后迭代不是最后一个元素 equal_range()...在集合中插入元素 lower_bound() 返回指向大于(或等于)某值第一个元素迭代 key_comp() 返回一个用于元素间值比较函数 max_size() 返回集合能容纳元素最大限值...() 返回大于某个值元素迭代 value_comp() 返回一个用于比较元素间函数 集合操作: std::set_intersection() :这个函数是求两个集合交集。...std::set_union() :求两个集合并集 std::set_difference():差集 std::set_symmetric_difference():得到结果是第一个迭代相对于第二个差集并

63040

9.1 C++ STL 排序、算数与集合

last);其中,first、last是随机访问迭代,表示待排序容器范围。...sort函数将[first, last]范围内元素按照递增顺序排序,并将排序后结果存储在相同容器中。sort函数在执行前,需要保证所排序元素类型支持<运算符。...min_element函数返回指向序列中最小元素迭代,max_element函数返回指向序列中最大元素迭代。...这些函数将运算结果复制到由result指定迭代范围内,并返回一个指向输出序列尾后位置迭代。读者需要注意,函数执行前,需要保证输入两个集合已经是有序集合,并且元素类型支持<运算符。...这些函数将计算结果复制到由result指定迭代范围内,并返回一个指向输出序列尾后位置迭代

21330
  • 9.1 C++ STL 排序、算数与集合

    last); 其中,first、last是随机访问迭代,表示待排序容器范围。...sort函数将[first, last]范围内元素按照递增顺序排序,并将排序后结果存储在相同容器中。sort函数在执行前,需要保证所排序元素类型支持<运算符。...min_element函数返回指向序列中最小元素迭代,max_element函数返回指向序列中最大元素迭代。...这些函数将运算结果复制到由result指定迭代范围内,并返回一个指向输出序列尾后位置迭代。 读者需要注意,函数执行前,需要保证输入两个集合已经是有序集合,并且元素类型支持<运算符。...这些函数将计算结果复制到由result指定迭代范围内,并返回一个指向输出序列尾后位置迭代

    17820

    STL学习笔记(16)常用STL算法

    回调函数或者谓词(返回 bool 类型函数对象) @return 返回相邻元素第一个位置迭代 */ adjacent_find(iterator beg, iterator end, _...算法 统计元素出现次数 @param beg 容器开始迭代 @param end 容器结束迭代 @param callback 回调函数或者谓词(返回 bool 类型函数对象)...1 结束迭代 @param _callback 回调函数或者谓词(返回 bool 类型函数对象) */ sort(iterator beg, iterator end, _callback...@param beg 容器开始迭代 @param end 容器结束迭代 @param callback 函数回调或者谓词(返回 Bool 类型函数对象) @param oldvalue...@param dest 目标容器开始迭代 @return 目标容器最后一个元素迭代地址 */ set_union(iterator beg1, iterator end1, iterator

    51430

    STL小结

    3、迭代具体实现在中,我们完全可以不管迭代类是怎么实现,大多数时候,把它理解为指针是没有问题(指针是迭代一个特例,它也属于迭代),但是,决不能完全这么做。...容器适配器接口更为简单,只是受限比一般容器要多。 迭代适配器:修改为某些基本容器定义迭代接口一种STL组件。反向迭代和插入迭代都属于迭代适配器,迭代适配器扩展了迭代功能。...SGI-STL空间配置有2种,一种仅仅对c语言malloc和free进行了简单封装,另一个设计到小块内存管理,运用了内存池技术。在SGI-STL中默认空间配置是第二级配置。...hash table不是C++标准程序库一员。 3、迭代器使用过程中优先选用前置式递增操作符(++iter)不是选择后置式递增操作符(iter++)。...大多数情况下,你应该用成员函数代替算法。这样做有两个理由。首先,成员函数更快。其次,比起算法来,它们容器结合得更好(尤其是关联容器)。那是因为同名算法和成员函数通常并不是是一样

    83810

    《C++Primer》算法概览

    没有end2则假定系列2至少与beg和end表示范围一样大。beg和beg2类型不必匹配,但必须保证两个序列中元素可以执行特性操作或调用给定可调用对象。 des表示目的序列迭代。...无论什么迭代都执行对数次比较操作,但是前向迭代必须花费线性次数迭代操作来移动到序列中要比较元素位置。 另外这些算法要求序列已经是有序它们行为类似关联容器同名成员。...使用输入迭代写算法 这些算法读取一个输入序列,将值写入到一个输出序列中。它们要求一个名为dest输出迭代表示输入范围迭代必须是输入迭代。...这些算法要求输出迭代来表示目的序列。 6.1 使用前向迭代重排序列 // 从序列中删除元素,采用办法是用保留元素覆盖要删除元素。...这些算法与标准库set容器不同,不要与set上操作相混淆。这些算法提供了普通顺序容器比如vector和list类集合行为。

    55510

    【C++】开始了解反向迭代

    1 前言 在复刻STL中list容器时,我们首次采用了类封装方式来构建迭代,以此实现迭代递增、递减和元素访问功能。...因为反向迭代与正向迭代在功能上存在高度一致性,唯一区别在于它们容器移动方向相反。因此,我们可以采用适配器设计模式,对现有的正向迭代进行二次封装,以此满足反向迭代需求。...然而,它们在操作方向上存在显著差异: 正向迭代通过++运算符向前移动,反向迭代则通过–运算符向后移动。...实现反向迭代基本方法是通过编写一个类模板,该模板会被编译器用来生成具体容器对应迭代实例。在这个过程中,编译负责实例化这些迭代,从而提供一种便捷方式来反向遍历容器元素。...因为为了与正向迭代对称,反向迭代开始位置并不是结尾,而是哨兵位。 下面这种可以直接使用已有的end() , begin()函数进行复用,增加代码可读性。所以对应访问方式就要减一再访问。

    12110

    再探 setmap

    文章目录 set篇 放码过来 set定义 自定义排序函数 set迭代 begin() 、end() 是否成功插入 元素检索 为何map和set插入删除效率比其他序列容器高,而且每次insert...map篇 放码过来 map迭代 自定义排序 [] 运算符重载函数 C++map迭代++操作是如何实现?...,则说明要插入元素已在容器中,此时 x.first 就是指向原有那个元素迭代。...然而,set应该更加被强调理解为“集合”,集合所涉及操作并、交、差等,即STL提供的如交集set_intersection()、并集set_union()、差集set_difference()和对称差集...8 s.lower_bound(8)返回8所在位置迭代 s.upper_bound(8)返回13所在位置迭代 对于在set中不存在元素,比如12 两个函数返回则都是13所在位置迭代 特殊地

    68820

    C++ stl_stl函数

    5. queue容器 queue容器基本概念 queue没有迭代 queue常用API 6. list容器 list容器迭代 list容器数据结构 list常用API 7. set/multiset...迭代:扮演了容器与算法之间胶合剂,共有五种类型,从实现角度来看,迭代是一种将operator* , operator-> , operator++,operator–指针相关操作予以重载class...虽然deque容器也提供了Random Access Iterator,但是它迭代不是普通指针,其复杂度和vector不是一个量级,这当然影响各个运算层面。...因此,除非有必要,我们应该尽可能使用vector,不是deque。...param dest 目标容器开始迭代 @return 目标容器最后一个元素迭代地址 */ set_union(iterator beg1, iterator end1, iterator beg2

    2.4K31

    C++提高编程笔记合集

    STL 几乎所有的代码都采用了模板类或者模板函数 2.3 STL六大组件 STL大体分为六大组件,分别是:容器、算法、迭代、仿函数、适配器(配接)、空间配置 容器:各种数据结构,如vector、list...算法:各种常用算法,如sort、find、copy、for_each 迭代:扮演了容器与算法之间胶合剂。 仿函数:行为类似函数,可作为算法某种策略。...2.4 STL中容器、算法、迭代 容器:置物之所也 STL容器就是将运用最广泛一些数据结构实现出来 常用数据结构:数组, 链表,树, 栈, 队列, 集合, 映射表 这些容器分为序列式容器和关联式容器两种...,vector可以动态扩展 动态扩展: 并不是在原空间之后续接新空间,而是找更大内存空间,然后将原数据拷贝新空间,释放原空间 vector容器迭代是支持随机访问迭代 3.2.2 vector...:一个是存储数据元素数据域,另一个是存储下一个结点地址指针域 STL中链表是一个双向循环链表 由于链表存储方式并不是连续内存空间,因此链表list中迭代只支持前移和后移,属于双向迭代

    91710

    Python迭代和解析(2):迭代初探

    但如果看下列表类型、元组、字符串容器类型属性列表,会发现没有它们只有__iter__(),并没有__next__(): >>> dir(list) [......但为什么它们能进行迭代呢?继续看下文"可迭代对象"解释。...什么是迭代对象和迭代 对于前面的容器类型(list/set/str/tuple/dict)只有__iter__()没有__next__(),但却可以进行迭代操作原因,是这些容器类型__iter_...迭代工具工作流程 像for/in/map/zip迭代工具,它们工作流程大致遵循这些过程(并非一定如此): 在真正开始迭代之前,首先会通过iter(X)内置函数获取到要操作迭代对象Y 例如it...这种类型对象自身不是迭代,就像内置各种可迭代容器类型一样。

    79520

    浅谈C、Java与Python之间小差异

    传统观点通常将变量比喻成容器,不同类型容器储存不同物质,就如同不同数据类型变量存储不同类型值一样。...C也是这样认为,它认为变量就和这些容器一样,int类型杯子就不能装double类型菜,float类型篮子就不能装char类型水。...在之前对变量处理中,Python选择为值分配内存空间,不是传统只为变量分配空间。...它发明了一个迭代range来取代之前自增计数迭代数只有在取用时候才占据内存,使用完将会在循环结束后释放,这样一来就能解决内存空间问题了。...对于传统基本数据类型,JVM将其存在栈中,而将实例化对象存在堆中。在函数调用时,对于简单基本数据类型,JVM进行值传递,而对于复杂对象则采用引用传递。

    80720

    C++编程常用头文件及其包含函数汇总

    2)可以使用insert操作向set容器添加元素  insert()参数既可以是一个键,也可以是一对迭代它们都可以实现向set容器中添加元素,只不过函数返回值不同。...使用count()函数可以查询元素是否存在,如果查询元素存在则返回1,反之则0。使用find()函数,如果查询元素存在则返回指向该元素迭代,反之则返回超出末端迭代。 ...使用count()和find()函数查询同一元素5,count()函数返回是该元素在set容器数量,find()函数则返回指向该元素迭代。...需要注意是,虽然使用find()函数可以返回指向该元素迭代,但只能对其做读操作,任何试图修改键值操作都是非法。 ...从定义可见,迭代模式是为容器而生。很明显,对容器对象访问必然涉及到遍历算法。你可以一股脑将遍历方法塞到容器对象中去;或者根本不去提供什么遍历算法,让使用容器的人自己去实现去吧。

    1.6K00

    c++ stl容器_c++ std是什么

    因此,在以后更后推荐使用它们。 删除操作: v1.erase(iterator)     // 删除人人迭代指定元素,返回被删除元素之后元素迭代。...这样做,不仅速度快,并且指向原容器迭代、引用以及指针仍然有效,因为原始数据没有变。在c++ primer 中建议大家使用非成员版本swap()函数,它在范型编程中很重要。 c....(另一个也支持迭代算术运算容器为string) 2. string容器 string与vector类似,但是string不是一种类模板,而就是一种类型,因为它专门用于存放字符(存放元素类型已经明确...当然,因为string类型比vector模板更特例化一些,因此它肯定具有一些自己特有vector没有的特性,下面总结一下。...list删除与增加元素操作不会破坏迭代 vector与string 会使迭代失效。

    64610

    Python迭代和生成器

    首先,我们都知道for循环是一个基础迭代操作,大多数容器对象都可以使用for循环,那么,我们从for循环开始: 你有没有想过,for循环内部实现原理呢?...其实,在Python中,for循环是对迭代进行迭代语法糖,内部运行机理就是:首先底层对循环对象实现迭代包装(调用容器对象__iter__方法)返回一个迭代对象,每循环一步,就调用一次迭代对象...对于像list,dict容器对象而言,都可以使用for循环,但是它们不是迭代它们属于可迭代对象。 什么是可迭代对象呢?...迭代时一个惰性序列,仅仅在迭代至当前元素时才计算该元素值,在此之前可以不存在,在此之后可以随时销毁,也就是说,在迭代过程中不是将所有元素一次性加载,这样便不需要考虑内存问题。...如果一个函数,使用了yield语句,那么它就是一个生成器函数,当调用生成器函数函数时,它返回一个迭代,不过这个迭代时一个生成器对象。

    41460

    【STL】vector模拟实现

    不过这里需要注意是,由于vector存储类型可能为自定义类型,因此可能会涉及到深浅拷贝问题。为了避免浅拷贝带来一些问题,所以我们在对赋值运算符重载时也会采用深拷贝方式。...2.1.5、析构 析构函数实现很简单,直接delete后,将迭代置空即可: 2.2、迭代相关 对于vector中begin,返回其首地址即start,end返回finish即可。  ...我们知道,迭代最重要就是要实现对容器元素访问,因此迭代++与解引用*操作十分重要,但是由于vector迭代是一个指针,而我们知道,指针本身就支持++与解引用操作,并且我们这里vector是一个连续空间...但是对于后面的容器诸如list、set、map它们迭代不是一个原生指针了,需手动实现,后面遇到再说。 同时,既然实现了迭代,也就能使用范围for对容器进行遍历访问。...:  我们对v1和v2进行调试观察: 我们画一个分析图,就很好理解了,如下:  因此,我们在实现时,不论时扩容,还是拷贝构造,以及赋值重载时,都是采用遍历整个容器,将元素一一赋值拷贝,这样再碰到这种情况

    22130

    读完两遍《STL源码剖析》后,我发现了一些辛秘

    ;//指向map中node ... } 从 deque 迭代数据结构可以看出,为了保持与容器联结,迭代主要包含四个主要部分:T* cur ,迭代所指缓冲区当前元素; T* first...stack 是一种先进后出数据结构,只能通过栈顶来进行元素获取或者删除,没有其他办法对内部元素进行操作,当然也没有迭代。其结构图如下: ?...其实它保存是两份元素,不是只保存一份元素。...hashtable 中 bucket 是自己定义,一种由 hashtable_node 数据结构组成 linked-list,并不是简单list或者双向list, bucket 采用 vector...unordered_map/unordered_set unordered_map/unordered_set 底层使用是 hashtable,不是像 map/set 一样使用红黑树,所以它没有自动排序功能

    3.1K33
    领券