STL常用生成算法和集合算法(20221207)

news2024/11/15 10:08:21

STL的常用算法

概述:

算法主要是由头文件<algorithm> <functional> <numeric> 组成。

<algorithm>是所有STL头文件中最大的一个,涉及比较、交换、查找、遍历等等;

<functional>定义了一些模板类,用于声明函数对象;

<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数。

四、常用的算术生成算法

注意:算术生成算法属于小型算法,使用时包含的头文件为#include<numeric>

算法简介:

accumulate  //计算容器元素累计总和

fill   //向容器中添加元素

1、accumulate(iterator beg,iterator end,value);

value 起始值 ,起始的累加值,不需要的话设为0

即最终应该返回:value+区间内元素的总和

//常用算术生成算法

void test01()

{

    vector<int>V;

    for (int i = 0; i <= 100; i++)

    {

        V.push_back(i);

    }

    int sum = accumulate(V.begin(), V.end(), 0);//返回计算的总和

    int sum1 = accumulate(V.begin(), V.end(), 100);//返回元素的总和+100=5150

    cout << "元素总和:" << sum << endl;

    cout << "元素总和+100:" << sum1 << endl;

}

2、fill(iterator beg,iterator end,value);

将指定区间内的元素填充为指定的元素

void myPrint(int val)

{

    cout << val << " ";

}



//常用算术生成算法

void test02()

{

    vector<int>V;

    for (int i = 0; i <= 100; i++)

    {

        V.push_back(i);

    }

    fill(V.begin(), V.end(), 99);

    for_each(V.begin(), V.end(), myPrint);

    cout << endl;

}

五、常用的集合算法

set_intersection //求两个容器的交集

set_union //求两个容器的并集

set_difference //求两个容器的差集

1、set_intersection

set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget1.begin())

返回一个结束位置的迭代器

注意两个原容器必须是有序序列。

void test01()

{

    vector<int>v1;

    vector<int>v2;

    for (int i = 0; i < 10; i++)

    {

        v1.push_back(i);

    }

    for (int i = 5; i < 18; i++)

    {

        v2.push_back(i);

    }

    //目标容器

    vector<int>vTarget1;

    //目标容器需要重新开辟空间

    //空间大小:最特殊情况为一个大容器中包含一个小容器,此时交集大小为小容器大小

    vTarget1.resize(min(v1.size(), v2.size()));

    //获取交集

    vector<int>::iterator itEnd =  set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget1.begin());

    for_each(vTarget1.begin(), itEnd, myPrint); //结束时用返回的迭代器 若用vTarget.end() 会将容器末尾补0返回

    cout << endl;

    for_each(vTarget1.begin(), vTarget1.end(), myPrint); //结束时用返回的迭代器 若用vTarget.end() 会将容器末尾补0返回

    cout << endl;

}

2、set_union

vector<int>::iterator itEnd= set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget1.begin());

void test02()

{

    vector<int>v1;

    vector<int>v2;

    for (int i = 0; i < 10; i++)

    {

        v1.push_back(i);

    }

    for (int i = 5; i < 18; i++)

    {

        v2.push_back(i);

    }

    //目标容器

    vector<int>vTarget1;

    //目标容器需要重新开辟空间

    //空间大小:最特殊情况为两个容器无重复元素,此时并集大小为两个集合之和

    vTarget1.resize(v1.size()+v2.size());

    //获取并集 结束时会返回并集的最后一个元素的迭代器

    vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget1.begin());

    for_each(vTarget1.begin(), itEnd, myPrint); //结束时用返回的迭代器 若用vTarget.end() 会将容器末尾补0返回

    cout << endl;

    for_each(vTarget1.begin(), vTarget1.end(), myPrint); //结束时用返回的迭代器 若用vTarget.end() 会将容器末尾补0返回

    cout << endl;

}

3、set_difference //求两个容器的差集

注意两个容器的差集不同

void test03()

{

    vector<int>v1;

    vector<int>v2;

    for (int i = 0; i < 10; i++)

    {

        v1.push_back(i);

    }

    for (int i = 5; i < 18; i++)

    {

        v2.push_back(i);

    }

    //目标容器

    vector<int>vTarget1;

    //目标容器需要重新开辟空间

    //空间大小:最特殊情况为两个容器无重复元素,此时差集大小为两个容器尺寸中的最大值(也可能是小的 看对象是哪个容器)

    vTarget1.resize(max(v1.size(),v2.size()));

    //获取差集 结束时会返回并集的最后一个元素的迭代器

    vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget1.begin()); //v1相对于v2的差集

    cout << "v1相对于v2的差集" << endl;

    for_each(vTarget1.begin(), itEnd, myPrint); //结束时用返回的迭代器 若用vTarget.end() 会将容器末尾补0返回

    cout << endl;

    cout << "v2相对于v1的差集" << endl;

    itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget1.begin());//v2相对于v1的差集

    for_each(vTarget1.begin(), itEnd, myPrint);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做一个公司网站大概要多少钱?

做一个公司网站大概要多少钱&#xff0c;很多公司在做网站之前可能已经简单了解过费用&#xff0c;但是费用差距都会比较大&#xff0c;为什么的呢&#xff0c;因为一般都是受到制作方式因素的影响。下面给大家说说不同的方式做一个公司网站大概要多少钱。 一、自己/团队做公司…

SQLyog —— 图形化工具使用

SQLyog下载链接&#xff1a; 点击跳转 在这一篇内容MySQL数据库 —— 常用语句当中讲到关于MySQL数据库命令的基本使用&#xff0c;这一篇是关于SQLyog数据库图形化工具的内容&#xff0c;先进行安装演示后在通过SQLyog进行操作数据库&#xff1a; SQLyog 安装 下载完成之后双击…

pageoffice在线打开word文件加盖电子印章

一、加盖印章的 js 方法 js方法 二、常见使用场景 1、常规盖章。弹出用户名、密码输入框&#xff0c;选择对应印章。 点击盖章按钮弹出用户名密码登录框&#xff0c;登录以后显示选择电子印章。 document.getElementById("PageOfficeCtrl1").ZoomSeal.AddSeal(…

Python模块pathlib操作文件和目录操作总结

前言 目前大家常用的对于文件和操作的操作使用 os.path 较多&#xff0c;比如 获取当前路径os.getcwd()&#xff0c;判断文件路径是否存在os.path.exists(folder) 等等。 在Python3.4开始&#xff0c;官方提供了 pathlib 面向对象的文件系统路径&#xff0c;核心的点在于 面向…

chatGPT代码写的有点好啊,程序员要失业了?

AI神器ChatGPT 火了。 能直接生成代码、会自动修复bug、在线问诊、模仿莎士比亚风格写作……各种话题都能hold住&#xff0c;它就是OpenAI刚刚推出的——ChatGPT。 有脑洞大开的网友甚至用它来设计游戏&#xff1a;先用ChatGPT生成游戏设定&#xff0c;再用Midjourney出图&…

element-plus elplus el-tree三种图标自定义 并且点击图标展开收起 点击文字获取数据

前言 公司需求,需要实现如下样式的树形列表 (基于vue3 element-plus) 当节点展开时,显示展开的文件夹图标,当节点收起时显示收起的文件夹,最后一级显示文件样式 废话没有了, 代码如下 <!-- 树形列表组件 --> <template><div class"tree-input" v-i…

Vue学习:回顾Object.defineProperty(给对象添加或者定义属性的)

<script>//定义对象let person{name:李四,sex:"男"}Object.defineProperty(person,age,{value:18});//参数:添加属性的对象 添加的属性名 配置项console.log(person)</script> 颜色不同&#xff1a;说明了age不可以枚举age属性不参与遍历 Object.keys(…

电脑屏幕录制怎么弄?电脑上怎么录制屏幕, 3个实用方法

对于日常办公的小伙伴来说&#xff0c;电脑、键盘、鼠标等办公设备都是不可分割的。事实上&#xff0c;不仅仅是在日常办公&#xff0c;在很多业余的活动中&#xff0c;也会使用到电脑设备。在使用电脑的时候&#xff0c;会经常有需要录制电脑屏幕的情况&#xff0c;比如记录会…

阿里云Linux热扩容云盘(growpart和resize2fs工具)

阿里云linux机器系统盘空间不够进行扩容 一、扩容物理盘 阿里云控制台在线扩容完成 二、安装growpart工具和resize2fs工具 [rootA ~]# yum install cloud-utils-growpart [rootA ~]# yum install xfsprogs 三、检查扩容磁盘属性 1、检查云盘大小 /dev/vda1显示容量为20G(在线…

Properties类的使用

Properties类是一个配置文件类&#xff0c;主要作用就是用来封装配置文件&#xff0c;将配置文件加载成为一个Properties对象。 注意&#xff1a;Properties类一般用来加载 .properties配置文件 首先看一下.properties配置文件的样子 driverClassNamecom.mysql.cj.jdbc.Drive…

电力系统潮流【牛顿-拉夫逊法】(4节点、5节点、6节点、9节点)(Matlab代码实现)

目录 1 概述 2 电力系统潮流计算概述 2.1 电力潮流发展进程 2.2牛顿拉夫逊法潮流计算 3 仿真结果 4 Matlab代码及文章讲解 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;⛳️⛳️⛳️ ​ 1 概述 最初&#xff0c;电力系统潮流计算是通过人工手算的。后…

Java内存区域与内存分配策略

java很聪明&#xff0c;它将手动改为自动&#xff0c;把内存的控制权交给了虚拟机&#xff0c;下面我们就来探究一下JVM是怎么进行自动内存管理的。 手动内存管理分为两部分&#xff1a;给对象分配内存和回收分配给对象的内存。 一、运行时数据区域 线程公有 在运行时数据区中…

基础入门 - SpringBoot 底层注解

目录 1、SpringBoot特点 1.1、依赖管理 1.2、自动配置 2、容器功能 2.1、组件添加 1、Configuration Spring Boot 在底层 Configuration 的两个配置 2、Import 3、Conditional 2.2、原生配置文件引入 1、ImportResource 2.3、配置绑定 1、ConfigurationProperties …

前端开发踩坑笔记(2022-11)

文章目录1、Mac上SourceTree更新已删除的远端分支和tag2、echarts x轴文字显示不全&#xff08;解决方案&#xff09;3、如何渲染多行多列的表格&#xff08;非固定的行数和列数&#xff09;4、umy-ui标题过长或内容过长时的处理5、dateRange的时间选择只能选择一个周6、如何将…

Servlet API 详解

目录 一、HttpServlet ① init() 方法 ② service() 方法 ③ destroy() 方法 ④ doGet()方法 ⑤ doPost()方法 ⑥ doPut/deDelete/doOptions 常见面试题&#xff1a; 请你谈谈Servlet的生命周期 二、Http请求&#xff1a;HttpServletRequest 1. 获取请求行信息 2. 获…

一个redux使用案例模板

目录 redux 纯函数和高阶函数&#xff1a; redux 开发工具使用 react-redux redux 1. 结构&#xff1a; count--index.jsx import React, { Component } from react import store from ../../redux/store import { acDecrement,acIncrement,acAsyncIncrement } from ../..…

不会向上管理的人,做不好项目经理和PMO【附具体行动清单】

在职场中&#xff0c;向上管理基本是最重要的一件事儿&#xff0c;升职涨薪奖金都离不开向上管理&#xff01;当你的向上管理做得好&#xff0c;机会都会迎面扑来。 你是不是也遇到过被领导批评时&#xff0c;感到非常委屈或愤怒&#xff0c;情绪经常被领导左右&#xff0c;那…

Three.js一学就会系列:02 画线

系列文章目录 Three.js一学就会系列&#xff1a;01 第一个3D网站 文章目录系列文章目录[Three.js一学就会系列&#xff1a;01 第一个3D网站](https://blog.csdn.net/u012551928/article/details/128205373)前言一、省略部分二、使用方法创建一个场景创建一个透视摄像机将渲染器…

详解CSS层叠上下文(解析z-index不生效的原因)

为什么会有层叠上下文 在CSS2.1规范中&#xff0c;每个盒模型的位置是三维的&#xff0c;分别是平面画布上的X轴&#xff0c;Y轴以及表示层叠的Z轴。一般情况下&#xff0c;元素在页面上沿X轴Y轴平铺&#xff0c;我们察觉不到它们在Z轴上的层叠关系。而一旦元素发生堆叠&#x…

查询网站的谷歌PR权重复杂吗?查询谷歌PR权重最简单的方法

查询网站的谷歌PR权重复杂吗&#xff1f;用对方法一点也不复杂哦! 查询谷歌PR权重最简单的方法——用网站批量查询工具。 网站批量查询工具根据网站的域名可以查询到网站的权重值、网站信息、域名信息、域名备案情况、域名是否安全&#xff0c;来作为网站数据分析的参考。 具体…