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.hqwc.cn/news/267332.html

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

相关文章

中伟视界:煤矿行业借力人工智能,防控灾害风险迈出新步伐 《“十四五”矿山安全生产规划》(应急(2022)64号),煤矿重大灾害风险防控系统

随着煤矿行业的发展&#xff0c;煤矿重大灾害风险防控成为了行业关注的重点之一。为了更好地预防和应对灾害风险&#xff0c;煤矿行业开始引入人工智能分析算法和检测场景&#xff0c;以提高灾害风险的识别和预警能力。 在煤矿的重大灾害风险防控中&#xff0c;AI算法发挥着重要…

MachMap:End-to-End Vectorized Solution for Compact HD-Map Construction

参考代码&#xff1a;None 动机与出发点 地平线的MapTR展现出了构建高精地图的能力&#xff0c;但是它的机制确实是有点复杂了。为了兼容不同车道线的朝向&#xff0c;环形车道线的起终点等情况&#xff0c;针对性设计了permute-equal的匹配逻辑&#xff0c;这样的逻辑真的是太…

VMWARE虚拟机无法正常复制粘贴

解决办法&#xff1a; 只要你拿25块钱给我&#xff0c;我立刻协助你完成这个任务&#xff0c;而且帮助你做到可以复制粘贴文件哈哈哈&#xff0c;搞不好不要钱&#xff0c;微信付款 我仔细看了&#xff0c;全网没有一个全面的解决方法&#xff0c;我这个是最全面的

以csv为源 flink 创建paimon 临时表相关 join 操作

目录 概述配置关键配置测试启动 kyuubi执行配置中的命令 bug解决bug01bug02 结束 概述 目标&#xff1a;生产中有需要外部源数据做paimon的数据源&#xff0c;生成临时表&#xff0c;以使用与现有正式表做相关统计及 join 操作。 环境&#xff1a;各组件版本如下 kyuubi 1.8…

【Kubernetes】存储类StorageClass

存储类StorageClass 一、StorageClass介绍二、安装nfs provisioner&#xff0c;用于配合存储类动态生成pv2.1、创建运行nfs-provisioner需要的sa账号2.2、对sa授权2.3、安装nfs-provisioner程序 三、创建storageclass&#xff0c;动态供给pv四、创建pvc&#xff0c;通过storage…

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

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

近期Chrome浏览器 不知哪个版本升级后原先http强制跳转到https,导致服务端302强制跳转到http也没反应

关于Chrome更新http强制跳转到https解决方法 近期Chrome浏览器 不知哪个版本升级后原先http强制跳转到https&#xff0c;导致服务端302强制跳转到http也没反应一、F12检查加载的Response Headers中有没有Non-Authoritative-Reason二、找了资料后得到解决方案&#xff1a;三、找…

java之“为什么需要数据类型?基本数据类型有哪些?数据类型的应用?”

java之“为什么需要数据类型&#xff1f;基本数据类型有哪些&#xff1f;数据类型的应用&#xff1f;” 一、eclipse操作示例1、完整代码2、运行效果 一、eclipse操作示例 1、完整代码 本文通过利用代码和注解的结合来回答“在java中为什么需要数据类型&#xff1f;基本数据类…

产品入门第一讲:Axure的安装以及基本使用

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…

二叉树的创建、销毁、层序遍历与层序遍历的进阶

二叉树的创建 #include <stdio.h> #include <assert.h> #include <stdlib.h> typedef int BTDataType;typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }TreeNode;TreeNode* BuyTreeNode(int x…

【C++】仿函数在模板中的应用——【默认模板实参】详解(n)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.引入&#xff1a;查看(容器)文档时常…

有趣的数学 用示例来阐述什么是初值问题二

一、示例 解决以下初值问题。 解决这个初始值问题的第一步是找到一个通用的解决方案。为此&#xff0c;我们找到微分方程两边的反导数。 即 我们能够对两边进行积分&#xff0c;因为y项是单独出现的。请注意&#xff0c;有两个积分常数&#xff1a;C1和C2。求解前面的方程y给出…