C++ 遍历算法

news2024/11/19 23:22:48

🤔遍历算法:

🙂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://www.coloradmin.cn/o/591486.html

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

相关文章

chatgpt赋能python:Python中调换数据位置的方法

Python中调换数据位置的方法 在Python编程中&#xff0c;我们经常需要操作数据的位置&#xff0c;例如调换数组中的元素顺序、交换多个变量的值等。在本篇文章中&#xff0c;我们将介绍Python中调换数据位置的常用方法&#xff0c;并给出相应的代码示例。 1.使用临时变量交换…

ShardingSphere笔记(三):自定义分片算法 — 按月分表·真·自动建表

ShardingSphere笔记&#xff08;二&#xff09;&#xff1a;自定义分片算法 — 按月分表真自动建表 文章目录 ShardingSphere笔记&#xff08;二&#xff09;&#xff1a;自定义分片算法 — 按月分表真自动建表一、 前言二、 Springboot 的动态数据库三、 实现我们自己的动态数…

chatgpt赋能python:Python中最大公约数计算

Python中最大公约数计算 在Python编程中&#xff0c;求最大公约数是一个非常常见的需求。最大公约数一般简称为gcd&#xff0c;其定义为两个或多个整数的最大公因数。 在本篇文章中&#xff0c;我们将介绍Python中最常用的两种计算gcd的方法&#xff0c;并深入讲解它们的实现…

使用Intel ARC 750 GPU或Intel CPU硬件在GIMP上运行stable diffussion插件进行AI绘图

安装步骤&#xff1a; 1. clone代码&#xff1a; git clone https://gitee.com/cslola/openvino-ai-plugins-gimp.git 或者直接到github上下载最新 git clone https://github.com/intel/openvino-ai-plugins-gimp.git2. 安装python以来库文件 :: run install script open…

LeetCode - 10 正则表达式匹配

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 10. 正则表达式匹配 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或…

SpringBoot框架理解

1 SpringBoot入门 1.2 什么是SpringBoot 1 官网的解释 ​ Spring在官方首页是这么说的&#xff1a;说使用SpringBoot可以构造任何东西&#xff0c;SpringBoot是构造所有基于Spring的应用程序的起点,SpringBoot在于通过最少的配置为你启动程序。 2 我的理解 SpringBoot是Sp…

损失函数——交叉熵损失(Cross-entropy loss)

交叉熵损失&#xff08;Cross-entropy loss&#xff09;是深度学习中常用的一种损失函数&#xff0c;通常用于分类问题。它衡量了模型预测结果与实际结果之间的差距&#xff0c;是优化模型参数的关键指标之一。以下是交叉熵损失的详细介绍。 假设我们有一个分类问题&#xff0…

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

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

elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择

效果展示(多列可以配置) 一、icon下拉框的多列选择&#xff1a; 二、常规、通用下拉框的多列选择&#xff1a; 【注】第二种常规、通用下拉框的多列选择&#xff0c;是在第一种的前端代码上删除几行代码就行&#xff08;把icon显示标签删去&#xff09;&#xff0c;所以下面着重…

陕西省养老服务人才培训基地申报条件范围、认定材料流程

今天为大家整理了陕西省养老服务人才培训基地申报条件范围、奖励措施等内容&#xff0c;感兴趣的朋友们可以了解一下&#xff01; 如果想要申报西安市、宝鸡市、铜川市、咸阳市、渭南市、延安市、汉中市、榆林市、安康市、商洛市的项目政策&#xff0c;详情见下图 目标任务 陕…

Games104现代游戏引擎学习笔记11

胶囊&#xff1a;两层。 内层&#xff1a;真正碰撞的层级 外层&#xff1a;类似保护膜&#xff0c;防止离别的东西太近&#xff0c;高速移动时卡进物体。另一个作用是防止过于贴近摄像机的进平面&#xff0c;看到墙背后的物体 朝墙移动时&#xff0c;实际往往并不是撞击&#…

Java程序设计入门教程-- switch选择语句

switch选择语句 情形 虽然if…else语句通过嵌套可以处理多分支的情况&#xff0c;但分支不宜太多&#xff0c;在Java语言中&#xff0c;提供了switch语句可以直接、高效地处理多分支选择的情况。 格式 switch &#xff08;表达式&#xff09; { case 常量表达式1&#x…

EclipseCDT远程交叉编译远程单步调试基于makefile例程(实测有效)

文章目录 前言&#xff1a;1. 新建工程2. 远程编译环境配置2.1 下载sshfs并挂载目录2.2 Debug配置2.3安装EclipseCDT的远程插件2.4 拷贝gdbserver 3. 调试总结: 前言&#xff1a; 之前写过一篇VSCode远程调试linux&#xff0c;当时是把程序以及代码通过远程的方式&#xff0c;…

pycharm内置Git操作失败的原因

文章目录 问题简介解决方案DNS缓存机制知识的自我理解 问题简介 最近在pycharm中进行代码改动递交的时候&#xff0c;总是出现了连接超时或者推送被rejected的情况&#xff0c;本以为是开了代理导致的&#xff0c;但是关闭后还是推送失败&#xff0c;于是上网查了以后&#xf…

查看MySQL服务器是否启用了SSL连接,并且查看ssl证书是否存在

文章目录 一、查看MySQL服务器是否启用了SSL连接 1.登录MySQL服务器 2.查看SSL配置 二、查看证书是否存在 前言 查看MySQL服务器是否启用了SSL连接&#xff0c;并且查看ssl证书是否存在 一、查看MySQL服务器是否启用了SSL连接 1.登录MySQL服务器 在Linux终端中&#xf…

【Windows驱动篇】解决Windows驱动更新导致AMD Software软件无法正常启动问题

【Windows驱动篇】解决Windows驱动更新导致AMD Software软件无法正常启动问题 【操作前先备份好电脑数据&#xff01;&#xff01;&#xff01;设置系统还原点等&#xff0c;防止系统出现问题&#xff01;&#xff01;&#xff01;谨慎请操作&#xff01;】 【操作前先备份好…

Windows本地提权 · 上篇

目录 at 命令提权 sc 命令提权 ps 命令提权 利用的是windows的特性&#xff0c;权限继承&#xff0c;命令或者服务创建调用的时候会以system权限调用&#xff0c;那么这个命令或者服务的权限也是system。 进程迁移注入提权 pinjector进程注入 MSF进程注入 令牌窃取提权…

chatgpt赋能python:Python中日期转换:从字符串到日期对象

Python中日期转换&#xff1a;从字符串到日期对象 作为一个经验丰富的Python工程师&#xff0c;日期转换在我的日常编码工作中经常遇到。Python提供了一些内置函数和模块&#xff0c;可以将字符串转换为日期对象或将日期对象格式化为特定的字符串。本篇文章将带您深入了解Pyth…

chatgpt赋能python:Python中的并运算:介绍及应用

Python中的并运算&#xff1a;介绍及应用 Python是一种功能强大且易于使用的编程语言&#xff0c;它的灵活性使得我们可以应用各种算法和数据结构进行处理。其中&#xff0c;位运算是Python中非常棒的特性之一&#xff0c;而其中又有一个重要的运算符——并运算。 什么是并运…

chatgpt赋能python:Python中的或运算:学习这个重要概念

Python中的或运算&#xff1a;学习这个重要概念 或运算是Python编程语言中一个重要的概念。了解如何使用或运算可以帮助程序员编写更有效和有意义的代码。在此文章中&#xff0c;我们将介绍Python中或运算的基础知识以及如何使用它来编写各种类型的代码。 什么是或运算&#…