练习题有做到 set_intersection 的相关练习,看别人写的看不懂,就找到了STL的官方文档,翻译加总结如下,如果单纯想要实例,可以去后面直接复制粘贴代码。

STL的地址:http://stlchina.huhoo.net/stl_doc/set_intersection.html

1、set_intersection 是从两个有序序列A、B中找到交集(返回结果也是有序的)
2、如果A、B中有多个同样的数,比如A中有3个5,B中有5个5,那么返回结果中有3个5
3、set_intersection 是稳定的,它返回的序列元素总是从第一个序列A中复制得到的
4、采用头文件:algorithm
5、set_intersection 从 有序序列[first1, last1) 和 [first2, last2) 中找到交集,涉及到比较两个对象是否相同,所以设计比较方式的问题。
它提供了两种调用方法,一种是采用默认排序方法, 一种是采用自定义排序方法

template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, InputIterator2 last2,OutputIterator result);

以上这个方法要求两个序列必须各自是按照升序排序的,比如序列{a, b},必须符合:!(a > b),即 a <= b

template <class InputIterator1, class InputIterator2, class OutputIterator,class StrictWeakOrdering>
OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, InputIterator2 last2,OutputIterator result,StrictWeakOrdering comp);

以上这个方法中要求定义的比较操作方法comp必须符合严格弱序(STL根据 !(a comp b) && !(b comp a) 为true的方式来判等)
这个方法要求两个序列必须是按照你自定义的方法来,比如{a, b},必须符合:!comp(a, b),反正记住,comp定义为小于,就是升序了
6、并集的结果不能存入到待比较的序列位置中去,两者不允许重叠
7、实例:

#include<iostream>
#include<iterator>
#include<algorithm>
using namespace std;// 这里是自定义的比较方法,这里自定义的 < 操作符,所以数据应有的序列应该是由小到大
inline bool lt_nocase(char c1, char c2) { return tolower(c1) < tolower(c2);
}int main()
{// 这些序列都必须是有序的,按照默认或自定义的比较规则来排序的 int A1[] = {1, 3, 5, 7, 9, 11};int A2[] = {1, 1, 2, 3, 5, 8, 13};  // 这里我稍作了修改,后面你可以看到,从大小写可以看出,取交集的结果是复制于A3而不是A4,set_intersection的稳定性就表现在这里 char A3[] = {'a', 'B', 'b', 'B', 'B', 'f', 'h', 'H'};char A4[] = {'A', 'B', 'B', 'C', 'D', 'F', 'F', 'H' };const int N1 = sizeof(A1) / sizeof(int);const int N2 = sizeof(A2) / sizeof(int); const int N3 = sizeof(A3);const int N4 = sizeof(A4);// 这里调用了 set_intersection 的两种比较方式 cout << "Intersection of A1 and A2: ";set_intersection(A1, A1 + N1, A2, A2 + N2, ostream_iterator<int>(cout, " "));cout << endl << "Intersection of A3 and A4: ";set_intersection(A3, A3 + N3, A4, A4 + N4, ostream_iterator<char>(cout, " "), lt_nocase);cout << endl;/*如果数组不是有序的,会出现大问题,A5第一个数是12,比 A6 的所有元素都大而且STL是默认为序列从小到大排序的,所以自然不会再去比较 A5 中的其他元素,所以返回的交集为空 */int A5[] = {12, 1, 3, 5, 7, 9};int A6[] = {1, 1, 2, 3, 5, 8, 11};  cout << "Intersection of A5 and A6: ";set_intersection(A5, A5 + N1, A6, A6 + N2, ostream_iterator<int>(cout, " "));
} 

运行结果:

STL官网学习笔记——set_intersection相关推荐

  1. Angular官网学习笔记

    Angular官网学习笔记 一.Angular概述 **什么是Angular:**一个基于TypeScript构建的开发平台包括: 一个基于组件的框架,用于构建可伸缩的Web应用 一组完美集成的库,涵 ...

  2. Vue 官网学习笔记

    VUE介绍 vue git 地址:https://github.com/vuejs/vue/projects Vue 官网教程地址:https://cn.vuejs.org/v2/guide/inst ...

  3. vue官网学习笔记(九)组件基础

    基本示例 这里有一个Vue组件的示例: // 定义一个名为 button-counter 的新组件 Vue.component('button-counter', {data: function () ...

  4. PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected.

    PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected. 问题描述 termi ...

  5. rt-thread官网应用笔记(设备驱动类)配套资料

    在rt-thread官网学习设备驱动类应用笔记时发现文章中给出的示例代码链接已经失效,在论坛中找到了该资源,现整理记录在此. 官网设备驱动类应用笔记网址:https://www.rt-thread.o ...

  6. JavaWeb黑马旅游网-学习笔记09【旅游线路收藏】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  7. JavaWeb黑马旅游网-学习笔记08【旅游线路详情】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  8. JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  9. JavaWeb黑马旅游网-学习笔记05【分类数据展示功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

最新文章

  1. STL源码剖析之算法:lower_bound
  2. 简述网络文件系统NFS,并说明其作用。
  3. you do not have permission
  4. 【iHMI43 4.3寸液晶模块】demo例程(版本1.02)发布
  5. python语言学习笔记整理
  6. php flash chat,FlashChat lt;= 4.5.7 (aedating4CMS.php) Remote File Include Vulnerability
  7. ReentrantReadWriteLock源码解读
  8. STM32-GPRS模块连接系统主站
  9. 小皮phpstudy无法启动mysql的解决方法
  10. vue项目中样式重置 自动注入less
  11. css类命名_标题CSS:CSS类命名的简单方法
  12. Python(TensorFlow框架)实现手写数字识别系统
  13. 基于web的员工信息管理系统
  14. win10dhcp服务器设置修复,win10不能启动dhcp如何解决_win10 dhcp服务无法启动怎么修复...
  15. 【JDBC】使用c3p0数据库连接池的各种报错警告
  16. 小学老师工资多少一个月_你知道小学老师一个月工资多少吗?揭开真实收入,让你想不到...
  17. C语言中自动获取当前时间和日期
  18. 【​观察】搭搭云9999元定制“全家桶套餐”,是市场噱头还是真刀实干?
  19. java静态和动态的区别_Java 静态与动态的区别
  20. 22-23学年计算机软件技术实习1——计算器

热门文章

  1. Python数据分析笔记:聚类算法之K均值
  2. linux查看内存的生产商,linux下查看CPU.内存型号.pci 转自《Ivan-blog》
  3. iphone界面元素的大小
  4. CSS教程舞蹈风暴,《舞蹈风暴》诚意展现舞蹈精神 “严师”沈伟下场演示舞蹈极致...
  5. 怎么用java实现直角三角形,java技术支持 输出一个直角三角形(下三角)
  6. ​AD设置丝印到阻焊的间距,并分析丝印重叠对阻焊的影响
  7. 地产“罗生门”:是世茂“不讲武德”,还是福晟“谎话连篇”?
  8. MySQL 使用profile分析慢sql,group left join效率高于子查询
  9. xshell连接linux系统
  10. 滴滴客服解决方案平台建设实践