C++之STL算法(1)

  STL容器算法主要由、、组成;
  algorithm主要有遍历、比较、交换、查找、拷贝、修改等;

1.遍历容器for_each

  for_each()函数用于完成容器遍历,函数参数如下:

for_each(_InIt _First, _InIt _Last, _Fn _Func)
形参:_First、_Last --容器的起始和结束迭代器_Func -->仿函数(回调函数),处理要输出的信息

1.1 vector容器遍历

  自定义数据格式:

class Person
{friend class mycompare;friend class Myprint;//友元类friend void Print(const Person& p);//友元函数
public:Person() {}Person(string name, int age) :name(name), age(age) {}Person(const Person& p){name = p.name;age = p.age;}bool operator<(const Person& p)const{if (this->age == p.age){return p.name < p.name;}return this->age > p.age;}
private:string name;int age;
};
void Print(const Person& p)
{cout << "姓名:" << p.name << "\t年龄:" << p.age << endl;
}
class Myprint
{
public:void operator()(const Person& p){cout << "姓名:" << p.name << "\t年龄:" << p.age << endl;}void operator()(const pair<Person, int>& p){cout << "姓名:" << (p.first).name << "\t年龄:" << (p.first).age << "\t成绩:" << p.second << endl;}
};
class mycompare
{
public:bool operator()(const Person& p1,const Person& p2)const{if (p1.age == p2.age){return p1.name < p2.name;}return p1.age > p2.age;}
};
void vector_test()
{cout << "\tvector容器示例:" << endl;//创建vector容器--->单端数组vector<Person>vtr;vtr.push_back(Person("小王", 18));vtr.push_back(Person("小林", 18));vtr.push_back(Person("小李", 18));vtr.push_back(Person("小刘", 18));cout << "提供一个函数示例:" << endl;for_each(vtr.begin(), vtr.end(), Print);cout << "提供一个仿函数示例:" << endl;for_each(vtr.begin(), vtr.end(), Myprint());
}

1.2 list容器遍历

void list_test()
{//创建一个list容器-->双向链表cout << "\tlist容器示例:" << endl;list<Person> t;t.push_back(Person("小王", 18));//尾插t.push_front(Person("小林", 18));//头插t.push_back(Person("小李", 18));t.push_back(Person("小刘", 18));cout << "提供一个仿函数示例:" << endl;for_each(t.begin(), t.end(), Myprint());
}

1.3 set容器遍历

void set_test()
{cout << "\tset/multiset关联式容器:" << endl;multiset<Person>mt;//该容器会自动排序mt.insert(Person("小王", 18));mt.insert(Person("小林", 18));mt.insert(Person("小李", 17));mt.insert(Person("小刘", 18));mt.insert(Person("小李", 22));for_each(mt.begin(), mt.end(), Myprint());cout << "\tset/multiset关联式容器(仿函数示例):" << endl;multiset<Person, mycompare>mt2;mt2.insert(Person("小王", 18));mt2.insert(Person("小林", 18));mt2.insert(Person("小李", 17));mt2.insert(Person("小刘", 18));mt2.insert(Person("小李", 22));for_each(mt.begin(), mt.end(), Myprint());
}

1.4 map容器遍历

void map_test()
{cout << "\tmap关联式容器示例:" << endl;multimap<Person, int>mp;mp.insert(make_pair(Person("小王", 18), 88));mp.insert(pair<Person,int>(Person("小林", 18),99));mp.insert(pair<Person, int>(Person("小李", 17), 95));mp.insert(pair<Person, int>(Person("小刘", 18), 95));mp.insert(pair<Person, int>(Person("小李", 22), 90));for_each(mp.begin(), mp.end(), Myprint());
}

1.5 整体运行效果

int main()
{vector_test();//vector容器list_test();//list容器set_test();//set容器map_test();//map容器system("pause");
}

在这里插入图片描述

2.转移元素transform

transform函数:transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func)将一个函数中的元素拷贝到另一个容器中,_First、_Last --要转移的容器的起始迭代器和结束迭代器_Dest --目标容器的起始迭代器_Func --仿函数,支持一元运算,可以对当前值进行+ - *  等各种运算
  • 使用示例:
#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
/*
transform函数:transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func)将一个函数中的元素拷贝到另一个容器中,_First、_Last --要转移的容器的起始迭代器和结束迭代器_Dest --目标容器的起始迭代器_Func --仿函数,支持一元运算,可以对当前值进行+ - * \ 等各种运算
*/
class myprint
{
public:void operator()(int val){cout << val << " ";}
};
class myfunc
{
public:int operator()(int val1){return val1;}
};void test()
{vector<int>t1;for (int i = 0; i < 10; i++){int temp = rand() % 101;t1.push_back(temp);}cout << "原容器数据:" << endl;for_each(t1.begin(), t1.end(), myprint());cout << endl;vector<int>target;target.resize(t1.size());//设置target容器大小transform(t1.begin(), t1.end(), target.begin(), myfunc());cout << "转移后的容器内容:" << endl;for_each(target.begin(), target.end(), myprint());cout << endl;
}
int main()
{test();system("pause");
}

在这里插入图片描述

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

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

相关文章

深度学习 Day10——T10数据增强

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言一、我的环境二、代码实现与执行结果1.引入库2.设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;3.导入数据4.查…

Docker基础概念解析:镜像、容器、仓库

当谈到容器化技术时&#xff0c;Docker往往是第一个被提及的工具。Docker的基础概念涵盖了镜像、容器和仓库&#xff0c;它们是理解和使用Docker的关键要素。在这篇文章中&#xff0c;将深入探讨这些概念&#xff0c;并提供更丰富的示例代码&#xff0c;帮助大家更好地理解和应…

智能优化算法应用:基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.混合蛙跳算法4.实验参数设定5.算法结果6.…

2023年华为HCIA认证H12-811题库讲解

在VRP平台上&#xff0c;可以通过下面哪种方式返回到上一条历史命令&#xff1f;&#xff08; &#xff09; A、Ctr1U B、Ctr1P C、左光标 D、上光标 试题答案&#xff1a;BD 试题解析&#xff1a;在VRP系统中&#xff0c;ctrlU为自定义快捷键&#xff0c;ct…

DevEco Studio 3.1IDE环境配置(HarmonyOS 3.1)

DevEco Studio 3.1IDE环境配置&#xff08;HarmonyOS 3.1&#xff09; 一、安装环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、环境安装 IDE下载地址&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 IDE的安装就是…

Android---Kotlin 学习002

声明变量 在 Kotlin 中定义一个变量&#xff0c;通过关键字 var 开始。然后是变量名&#xff0c;在“:”后紧跟变量类型。 示例1&#xff1a;声明一个 int 类型的变量 var num:Int 1 示例2&#xff1a;声明一个 String 类型的变量 var str:String "Hello world&quo…

计算机网络——期末考试复习资料

什么是计算机网络 将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路和通信设备连接起来&#xff1b;实现资源共享和数据传递的计算机的系统。 三种交换方式 报文交换&#xff1a;路由器转发报文&#xff1b; 电路交换&#xff1a;建立一对一电路 分组交换&a…

2024 年 SEO 现状

搜索引擎优化&#xff08;SEO&#xff09;一直以来都是网络知名度和成功的基石。随着我们踏上 2024 年的征程&#xff0c;SEO领域正在经历重大变革&#xff0c;有些变革已经开始&#xff0c;这对企业、创作者和营销人员来说既是挑战也是机遇。 语音搜索 语音搜索曾是一个未来…

可以组成网络的服务器 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 在一个机房中&#xff0c;服务器的位置标识在n*m的整数矩阵网格中&#xff0c;1表示单元格上有服务器&#xff0c;0表示没有。如果两台服务器位于同一行或者同一列…

HTML常用表单元素使用?

目录 一、常用表单元素使用的关键字二、常用表单元素使用的效果与作用&#xff08;1&#xff09;password : 保护用户的隐私(2) email: 输入邮件&#xff08;比如QQ邮件&#xff09;(3)、number : 输入框只能输入数字&#xff08;4&#xff09;、tel : 常用于输入电话号&#x…

Kubernetes实战(十二)-使用kubeconfig文件管理多套kubernetes(k8s)集群

1 概述 在生产环境中可能不止有一套kubernetes(k8s)集群&#xff0c;面对多套集群&#xff0c;运维人员可以使用kubeconfig文件管理多套kubernetes(k8s)集群&#xff0c;使用 kubeconfig 文件&#xff0c;可以组织集群、用户和命名空间&#xff0c;还可以定义上下文&#xff0…

深入理解模板引擎:解锁 Web 开发的新境界(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Axure安装及面板各区域详解

目录 一、Axure简介 二、Axure安装及使用准备 2.1 Axure官网 2.2 Axure授权 2.3 Axure汉化 2.4 设置RP文件保存路径 三、Axure菜单栏的使用 3.1 新建项目 3.2 新建元件库 3.3 自动备份设置 3.4 页面画布网格设置 四、Axure工具栏 4.1 选择模式 4.1.1 相交选中 4…

深度学习 Day15——P4猴痘病识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU&#xff08;如果设备上支持GPU就使用GPU,否则使用C…

庙算兵棋推演平台配置

9月23开始&#xff0c;9月26完成。因为那时刚从大连回来&#xff0c;十一之后又一个紧急项目当项目负责人&#xff0c;所以隔了这么久才发出来。 我尝试进行制作平台AI&#xff0c;想在我的小平板上配好&#xff0c;最好还可以移植。于是我采用WSL&#xff08;windows自带的do…

VSCode中如何查看EDI报文?

VSCode是开发人员常用的一款软件&#xff0c;为了降低EDI报文的阅读门槛&#xff0c;知行的开发人员设计了EDI插件&#xff0c;可以在VSCode中下载使用。 如何打开一个EDI报文——VSCode EDI插件介绍 EDI插件下载流程 进入VSCode&#xff0c;打开Extensions&#xff0c;在搜索…

Acrobat Pro中不能使用有道词典取词翻译

编辑–>首选项–>安全性&#xff08;增强–>启动时启用保护模式&#xff08;预览&#xff09;&#xff0c;取消前面的勾即可

uniapp - 简单版本自定义tab栏切换

tab切换是APP开发最常见的功能之一&#xff0c;uniapp中提供了多种形式的tab组件供我们使用。对于简单的页面而言&#xff0c;使用tabbar组件非常方便快捷&#xff0c;可以快速实现底部导航栏的效果。对于比较复杂的页面&#xff0c;我们可以使用tab组件自由定义样式和内容 目录…

2023年医疗器械行业分析(京东医疗器械运营数据分析):10月销额增长53%

随着我国整体实力的增强、国民生活水平的提高、人口老龄化、医疗保障体系不断完善等因素的驱动&#xff0c;我国的医疗器械市场增长迅速。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年10月份&#xff0c;京东平台上医疗器械市场的销量将近1200万&#xff0c;环比…

SU渲染受到电脑性能影响大吗?如何提高渲染速度

一般3d设计师们在进行设计工作前都需要提供一台高配电脑&#xff0c;那么你这知道su渲染对电脑要求高吗&#xff1f;电脑带不动su怎么解决&#xff1f;su对电脑什么配件要求高&#xff1f;今天这篇文章就详细为大家带来电脑硬件对su建模渲染的影响&#xff0c;以及su渲染慢怎么…