C++ 遍历算法

🤔遍历算法:

🙂1.for_each   遍历容器

🔍介绍:

在C++中,for_each是一个用于遍历容器元素并对它们进行操作的算法。它通常有三个参数:

📖1. 容器的起始位置(iterator)
📖2. 容器的结束位置(iterator)
📖3. 遍历时调用的参数(func)

for_each`函数的基本格式如下:

std::for_each(containerBegin, containerEnd, operationFunc);

📖其中,containerBegincontainerEnd是指容器的起始和结束位置;operationFunc是指用于操作元素的函数对象。

📖对于operationFunc参数,它可以是一个普通函数、一个函数对象、一个lambda表达式,或者是一个指向成员函数的指针,只要它满足指定的函数签名即可。该函数或函数对象需要接受一个输入元素,并对其进行操作。 for_each算法将会遍历容器的所有元素,并对每个元素依次调用 operationFunc`函数。

简单的说就是第三个参数既可以调用普通函数,也可以调用仿函数。

🔍代码示例:

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//普通函数:
void print(int val)
{cout << val;
}
//仿函数:
class print02
{
public:void operator()(int val){cout << val;}};
void test01()
{vector<int>d1;for (int i = 0; i < 10; i++){d1.push_back(i);}cout << "调用普通函数";for_each(d1.begin(), d1.end(), print);cout << endl;cout << "调用仿函数";print02 p;for_each(d1.begin(), d1.end(), print02());
}
int main()
{test01();
}

🔍运行结果:

 

🙂2.transform  搬运容器到另一个容器

🔍介绍:

在C++中,transform是一个标准库函数,用于将一个序列的元素进行转换。它通常有三个参数:

📖1. 输入序列的起始位置(iterator)
📖2. 输入序列的结束位置(iterator)
📖3. 输出序列的起始位置(iterator)

此外,它通常还有一个可选的第四个参数,即用于转换的函数,该函数接受一个输入元素并返回一个输出元素

所以,transform函数的基本格式如下:

std::transform(inputBegin, inputEnd, outputBegin, transformFunc);

📖其中,inputBegin和inputEnd是指输入序列的起始和结束位置;outputBegin是指输出序列的起始位置;transformFunc是指用于转换的函数。

📖对于`transformFunc`参数,它可以是一个普通函数、一个函数对象、一个lambda表达式,或者是一个指向成员函数的指针,只要它满足指定的函数签名即可。该函数或函数对象需要接受一个输入元素,并返回一个输出元素,用于执行从输入到输出元素的转换。

🔍代码示例:

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
void printc(int val)
{cout << val;
}
//普通函数:
int print(int val)
{return val;
}
//仿函数:
class print02
{
public:int operator()(int val){return val;}};
void test01()
{vector<int>d1;for (int i = 0; i < 10; i++){d1.push_back(i);}vector<int>d2;d2.resize(d1.size());cout << "transform调用普通函数"<<endl;transform(d1.begin(), d1.end(), d2.begin(), print);	for_each(d2.begin(), d2.end(), printc);cout << endl;cout << "transform调用仿函数" << endl;vector<int>d3;d3.resize(d1.size());transform(d1.begin(), d1.end(), d3.begin(), print);	for_each(d3.begin(), d3.end(), printc);}
int main()
{test01();
}

🔍运行结果:

 

🤔所有遍历算法:

在C++标准库中,提供了一系列的遍历算法,可以方便地对容器中的元素进行遍历和操作。这里我们简单总结一下:

📖1. for_each :对容器内的每个元素执行一个操作,可以使用函数、函数对象或者Lambda表达式来进行操作。

📖2. for_each_n :对容器内的前n个元素执行一个操作,可以使用函数、函数对象或者Lambda表达式来进行操作。

📖3. count :用于统计容器中指定值的出现次数,返回一个整数。

📖4. count_if :用于统计满足指定条件的元素个数,返回一个整数。

📖5. find: 在容器中查找某个元素,返回该元素在容器中的迭代器,没有找到返回 `containerEnd`。

📖6. find_if:在容器中查找满足特定条件的第一个元素,返回该元素在容器中的迭代器,没有找到返回 `containerEnd`。

📖7. find_if_not:在容器中查找不满足特定条件的第一个元素,返回该元素在容器中的迭代器,没有找到返回 `containerEnd`。

📖8. search:在容器中查找另一个小容器的首次出现,返回小容器首次出现位置的迭代器,没有找到返回 `containerEnd`。

📖9. transform:将一个序列的元素进行转换放入另一个序列中,可以使用函数、函数对象或者Lambda表达式来进行转换。

📖10. remove :从容器中删除所有指定值,返回删除后的容器的结束位置迭代器。

📖11. `remove_if` :从容器中删除满足特定条件的所有元素,返回删除后的容器的结束位置迭代器。

📖12. replace :将容器中的所有指定值替换为另一个值,返回替换后的容器的结束位置迭代器。

📖13. replace_if :将容器中满足特定条件的元素替换为另一个值,返回替换后的容器的结束位置迭代器。

📖14. reverse :容器反转,返回容器的起始位置迭代器。

📖15. rotate :将容器的元素旋转一定的距离,返回旋转后容器的起始位置迭代器。

📖16. swap_ranges:交换两个容器之间指定范围的元素,返回第二个容器的结束位置迭代器。

📖17. unique`:将容器中连续重复的元素删除,返回删除后的容器的结束位置迭代器。

需要注意的是,这些算法都依赖于容器的迭代器,因此要确保传入的参数是指向容器中的合法位置。

🤔结束!

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

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

相关文章

layui框架学习(25:弹出层模块_加载框询问框)

layui框架的弹出层模块layer中最重要的函数即layer.open&#xff0c;基于该函数&#xff0c;layer模块封装了很多常用弹出框&#xff0c;上文已介绍了消息框和提示框函数&#xff0c;本文学习加载框和询问框函数的基本用法&#xff0c;同时继续学习layer模块中基础参数的用法。…

【SpringCloud——Elasticsearch(上)】

一、什么是Elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。 二、倒排索引 1、正向索引 2、倒排索引 3、总结 三、ES和MySQL的区别 四、操作索引库 1、基于Kibana&#xff08;WEB界面&#xff09; 以下操作…

代码随想录算法训练营第五十七天 | 回文

647. 回文子串 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;动态规划&#xff0c;字符串性质决定了DP数组的定义 | LeetCode&#xff1a;647.回文子串_哔哩哔哩_bilibili 状态&#xff1a;不会做。 思路 确定dp数组&#xff08;dp table&#xf…

驱动LSM6DS3TR-C实现高效运动检测与数据采集(3)----获取ID

概述 一旦传感器被正确初始化&#xff0c;可以通过SPI或I2C接口向传感器发送读取命令&#xff0c;并接收传感器返回的数据。这个读取过程包括获取LSM6DS3TR传感器提供的加速度计和陀螺仪数据&#xff0c;以及传感器对应的温度信息。 获取数据状态 STATUS_REG (1Eh)是该传感器…

chatgpt赋能python:Python中构造方法的介绍与应用

Python中构造方法的介绍与应用 在Python编程语言中&#xff0c;构造方法通常是类中的一个特殊方法&#xff0c;用于在对象创建时初始化其属性。构造方法使用__init__关键字来定义&#xff0c;而且通常会包含self参数&#xff0c;用于引用创建的新对象。在本文中&#xff0c;我…

木工专用计算机,木工做多功能电脑台带书柜架一体图片 自己打造电脑桌用实木还是生态木颗粒板...

黑色十字条纹状的书架&#xff0c;给人带来一种与众不同的感觉&#xff0c;褐色的实木地板铺贴在地面上&#xff0c;褐色的地面与整个橱柜形成了鲜明的对比。褐色给人一种灰溜溜的感觉&#xff0c;但是这种颜色很有古典美&#xff0c;而且褐色的地面又特别的耐脏&#xff0c;这…

python爬虫大众点评字体反爬

字形相同的字体反爬问题解析 问题所在&#xff1a;部分数据加载时使用网站自定义的字体&#xff0c;浏览器访问网页时字体文件会加载到浏览器中&#xff0c;爬虫访问时没有对应的自定义字体&#xff0c;所以就得不到那部分数据&#xff0c;如图1&#xff0c;加密的这部分数据在…

五笔字根语法口决

一、字根助记词 11G   王旁青头戋五一 12F   土士二干十寸雨 13D   大犬三&#xff08;羊&#xff09;古石厂 (“羊”指羊字底) 14S   木丁西 15A   工戈草头右框七   (“右框”即“匚”) 21H   目具上止卜虎皮   (“具”指具字的上部) 22J   日早…

字体反爬案例解析:大众点评

文章目录 字体反爬简介发送请求&#xff0c;获取网页源码提取字体信息&#xff0c;并将字体文件下载到本地建立基准字典引例提取需要字体反爬处理的信息提取不需要字体反爬的信息整理提取到的所有信息&#xff0c;并存入excel 字体反爬简介 什么是字体反爬&#xff1f; …

作文 我眼中的计算机1000字,我眼中的自己作文范文1000字(精选6篇)

我眼中的自己作文范文1000字(精选6篇) 在日常生活或是工作学习中&#xff0c;许多人都有过写作文的经历&#xff0c;对作文都不陌生吧&#xff0c;作文根据写作时限的不同可以分为限时作文和非限时作文。还是对作文一筹莫展吗&#xff1f;以下是小编为大家整理的我眼中的自己作…

基于深度学习的高精度家禽猪检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度家禽猪检测识别系统可用于日常生活中或野外来检测与定位家禽猪目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的家禽猪目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检…

智能管理PoE交换机

在这个万物互联的时代&#xff0c;数据与数据之间的相互传输交流&#xff0c;显得尤为重要。那么要怎样才能使计算机与传统的物联设备相连接呢&#xff1f;这时&#xff0c;串口服务器这一媒介的作用就凸显出来了。那么&#xff0c;你知道什么是串口服务器吗&#xff1f;串口服…

chatgpt赋能python:Python中构造函数的名称

Python中构造函数的名称 作为一名有10年Python编程经验的工程师&#xff0c;我深知Python语言中构造函数的重要性。在本文中&#xff0c;我将着重介绍Python中构造函数的名称&#xff0c;并阐述其在Python编程中的作用。 什么是构造函数&#xff1f; 构造函数是一种特殊类型…

C++ stack容器介绍

&#x1f914;stack容器介绍&#xff1a; &#x1f4d6; stack是一种数据结构&#xff0c;也可以被称为堆栈。它是一个容器&#xff0c;只允许在最顶层进行插入和删除&#xff0c;并且只能访问最后一个插入的元素。这个元素称为栈顶。所有新插入的元素都被放置在栈顶上面&#…

Mysql source命令报错

Mysql source命令报错 情况一&#xff1a;目录包含中文 放到没有中文的路径再执行 情况二&#xff1a;不小心加了分号 mysql会将分号当做文件名的一部分 固然报错 情况三&#xff1a;没有选择数据库 使用 use加数据库名 选择数据库后再执行 执行成功画面

Linux中的source命令

Linux中的source命令 1、source命令是什么&#xff1f; source命令也称为“点命令”&#xff0c;也就是一个点符号&#xff08;.&#xff09;&#xff0c;是bash的内部命令。 注意&#xff1a;该命令通常用命令“.”来替代 2、source命令 功能&#xff08;能干什么&#xff0…

qsort函数排序举例

使用qsort函数快速排序应用举例 这篇博客是用qsort函数来快速排列float型数据&#xff0c;分别按照年龄&#xff08;int型&#xff09;、姓名&#xff08;char型&#xff09;排列结构体。看懂就看懂&#xff0c;看不懂我也不想解释了。 简略解释一下qsort函数&#xff1a; v…

C语言qsort函数详解

目录 一、qsort函数的使用 二、qsort函数的模拟 一、qsort函数的使用 快排函数qsort是C的库函数&#xff0c;它可以对输入的任何类型的数组排序&#xff0c;通过该函数的函数声明我们可以看出它的使用方法&#xff1a; 举个栗子&#xff1a; #include<stdio.h> #inclu…

C语言 - qsort函数详解

文章目录 一.qsort函数简介1.qsort函数是C标准库<stdlib.h>库中的函数&#xff0c;使用时引入#include <stdlib.h>。**2.它的函数原型是 void qsort(void* base, size_t num, size_t width, int (*compare)(const void*, const void*))3.这些参数都是什么意思&…

qsort函数详解

上篇文章&#xff0c;笔者讲解了冒泡排序的方法&#xff0c;原文链接为&#xff1a;一个典列来带领大家了解冒泡排序思想_念君思宁的博客-CSDN博客&#xff0c;有意者请参考一下&#xff01; 最近笔者又浅学关于qsort函数的排序方法&#xff01;下面且听笔者一一道来&#xff…