当前位置: 首页 > news >正文

12.C++常用的算法_遍历算法

文章目录

    • 遍历算法
      • 1. for_each()
        • 代码工程
        • 运行结果
      • 2. transform()
        • 代码工程
        • 运行结果
      • 3. find()
        • 代码工程
        • 运行结果

遍历算法

1. for_each()

有两种方式:
1.普通函数
2.仿函数

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>using namespace std;/*普通函数*/
void print01(int val)
{cout << val << " ";
}/*仿函数*/
class print02
{
public:void operator()(int val){cout << val << " ";}
};void test01()
{vector<int>v;for (int i = 0; i < 5; i++){v.push_back(i);}/*普通函数*/for_each(v.begin(), v.end(), print01);cout << endl;/*仿函数*/for_each(v.begin(), v.end(), print02());cout << endl;return;
}int main()
{test01();return 0;
}
运行结果

在这里插入图片描述

2. transform()

要注意:需要提前给目标容器开辟空间

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>using namespace std;class print
{
public:void operator()(int val){cout << val << " ";}
};class Transform
{
public:int operator()(int val){return val;}
};void test01()
{vector<int>v;for (int i = 0; i < 5; i++){v.push_back(i);}vector<int>vTarget;vTarget.resize(v.size());/*目标容器需要提前开辟空间*/transform(v.begin(), v.end(), vTarget.begin(), Transform());for_each(v.begin(), v.end(), print());cout << endl;for_each(vTarget.begin(), vTarget.end(), print());cout << endl;return;
}int main()
{test01();return 0;
}
运行结果

在这里插入图片描述

3. find()

要注意:bool operator==(const Person &p)参数里要加const修饰

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>using namespace std;class Person
{
public:Person(string name, int age){m_name = name;m_age = age;}bool operator==(const Person &p){if (this->m_name == p.m_name && this->m_age == p.m_age){return true;}else{return false;}}string m_name;int m_age;
};
void test01()
{vector<int>v;for (int i = 0; i < 5; i++){v.push_back(i);}/*在v容器中查找5这个元素*/vector<int>::iterator pos = find(v.begin(), v.end(), 4);if (pos == v.end()){cout << "没找到该元素" << endl;}else{cout << "找到该元素,为:" << *pos << endl;}return;
}void test02()/*测试自定义数据类型*/
{Person p1("刘备", 26);Person p2("曹操", 30);Person p3("赵云", 28);Person pp("赵云", 28);vector<Person>v;v.push_back(p1);v.push_back(p2);v.push_back(p3);vector<Person>::iterator pos = find(v.begin(), v.end(), pp);if (pos == v.end()){cout << "没找到该元素" << endl;}else{cout << "找到该元素" << "名字: " << pos->m_name << "  年龄:" << pos->m_age << endl;}return;
}int main()
{test01();cout << endl;test02();return 0;
}
运行结果

在这里插入图片描述

http://www.lryc.cn/news/335438.html

相关文章:

  • hadoop:案例:将顾客在京东、淘宝、多点三家平台的消费金额汇总,然后先按京东消费额排序,再按淘宝消费额排序
  • 2024年华为OD机试真题-孙悟空吃蟠桃-Python-OD统一考试(C卷)
  • vue3 开发中遇到的问题
  • Vue input密码输入框自定义密码眼睛icon
  • 【LAMMPS学习】八、基本知识的讨论(1.4)多副本模拟
  • SpringBoot整合RabbitMQ-应答模式
  • 51单片机入门_江协科技_25~26_OB记录的笔记_蜂鸣器教程
  • 新能源汽车电池包为什么不通用,车主怎么用电才算对?
  • [C语言]——柔性数组
  • 密码学 总结
  • 尚硅谷html5+css3(1)html相关知识
  • 苍穹外卖11(Apache ECharts前端统计,营业额统计,用户统计,订单统计,销量排名Top10)
  • 大商创多用户商城系统 多处SQL注入漏洞复现
  • 美团一面4/9
  • ubuntu下NTFS分区无法访问挂载-解决办法!
  • 如何在 Ubuntu 14.04 上使用 Rsyslog、Logstash 和 Elasticsearch 实现日志集中管理
  • mapbox 工作问题暂时记录
  • Linux、Docker、Brew、Nginx常用命令
  • 【Spring实战项目】SpringBoot3整合WebSocket+拦截器实现登录验证!从原理到实战
  • 第二证券|政策利好不断,工业母机概念爆发,华东数控等涨停
  • Thinkphp5萤火商城B2C小程序源码
  • PostgreSQL介绍
  • 简析数据安全保护策略中的十个核心要素
  • Python+Django+Html河道垃圾识别网页系统
  • BUUCTF:BUU UPLOAD COURSE 1[WriteUP]
  • 从零开始学习:如何使用Selenium和Python进行自动化测试?
  • 【linux基础】bash脚本的学习:定义变量及引用变量、统计目标目录下所有文件行数、列数
  • 算法四十天-删除排序链表中的重复元素
  • Linux-等待子进程
  • 【LeetCode热题100】【二叉树】二叉树的最大深度