迭代器与仿函数

news2024/11/24 14:28:36

迭代器与仿函数

    • 一般分类
    • 功能方式分类
    • STL迭代器的类型
    • 迭代器辅助函数
    • 流型迭代器
  • 仿函数
    • 仿函数的编写
    • 标准库中的仿函数

一般分类

  1. 正向迭代器
    容器名:iterator it
    begin()
    end()

2.反向迭代器
容器名:reverse_iterator it
rbegin()
rend()

3.常正向迭代器
容器名:const_iterator it
cbegin()
cend()

4.常反向迭代器
容器名:const_reverse_iterator it
crbegin()
crend()\

注意:
begin()可以表示第一个元素
end()不能够表示最后一个元素

#include<iostream>
#include<string>
#include<vector>

using namespace std;

int main()
{
	vector<int> i = { 1, 2, 4, 2, 4, 5 };
	
	//4种迭代器
	vector<int> ::iterator it = i.begin();
	vector<int> ::reverse_iterator rit;
	vector<int> ::const_iterator cit;
	vector<int> ::const_reverse_iterator crit;


	system("pause");
	return 0;
}

功能方式分类

1.正向迭代器
2.双向迭代器
3.随机访问迭代器

STL迭代器的类型

在这里插入图片描述

迭代器辅助函数

distacne(第一个参数,第二个参数)计算迭代器中2个参数的位置

iter_swap(iterator first, iterator second)
交换迭代器中的两个元素

流型迭代器

输出流型迭代器
ostream_iterator
istream_iterator

ostream_iterator<类型> 对象(参数);
对象 = 值;
也就相当于 cout << 值;

#include<iostream>

using namespace std;

int main()
{
	//输出流迭代器
	ostream_iterator<int> coutiterator(cout);
	coutiterator = 1999;
	//cout << 1999;

	system("pause");
	return 0;
}

流迭代器,通常结合copy函数一起使用
copy(),有三个参数,作用就是将值赋值到另一个上
第一个参数和第二个参数,表示值的范围,第三个参数表示赋值对象的位置。

#include<iostream>
#include<vector>

using namespace std;

int main()
{
	输出流迭代器
	//ostream_iterator<int> coutiterator(cout);
	//coutiterator = 1999;
	cout << 1999;

	//分开写
	vector<int> it = { 1, 3, 4, 3, 2, 6, 3, 7, 3 };

	ostream_iterator<int> coutiterator(cout);

	cout << endl;
	//合着写
	copy(it.begin(), it.end(), coutiterator);
	copy(it.begin(), it.end(), ostream_iterator<int>(cout));

copy(it.begin(), it.end(), ostream_iterator<int>(cout, " "));
//每个数据,都有隔开
	system("pause");
	return 0;
}

输入流迭代器
istream_iterator<类型> EOS; //输入的与要求的不一样,错误流
istream_iterator<类型> object1;
*object1;(等效于cin操作)

#include<iostream>
#include<vector>

using namespace std;

int main()
{
	cout << "输入整形数据" << endl;
	vector<int> date;
	istream_iterator<int> EOS;
	istream_iterator<int> ciniterator(cin);

	while (ciniterator != EOS)
	{
		date.push_back(*ciniterator);
		++ciniterator;
	}

	for (auto& v : date)
	{
		cout << v << endl;;
	}

	return 0;
}

在这里插入图片描述

如果所示:
用这种方法好处在于:输入一些不是要求的数据类型,程序不会像cin一样崩溃,而是会结束程序
并且,也只会打印要求的数据类型。

仿函数

仿函数:是让类名模仿函数调用的行为(函数调用:函数(函数参数))
仿函数:类名(参数)使用
1.仿函数实质上是()运算符的重载
2.仿函数一般是作为排序准则,或者比较准则

仿函数的编写

一般情况下都需要用const来修饰

#include<iostream>

using namespace std;

class sum
{
public:
	int operator() (const int& a, const int& b) const
	{
		return a + b;
	}
};

int main()
{
	sum mm;
	cout << mm(1, 32) << endl;  //隐式调用
	cout << mm.operator()(1, 34) << endl; //显示调用

}

标准库中的仿函数

使用标准库里的仿函数必须要包含头文件functional
求和plus,求减minus
使用方法:
函数<类型> ()(参数)

#include<iostream>
#include<functional>
#include<set>

using namespace std;

int main()
{
	cout << plus<int>()(1, 3) << endl;//加
	cout << minus<int>()(3, 1) << endl;//减

	set<int, greater<int>> date = { 1, 4, 3, 1, 0, 8, 0};

	copy(date.begin(), date.end(),ostream_iterator<int>(cout));

}

set ,map, priority_queue算法 sort
greater >
less <
less_qual <=
not_equal_to !=
equal_to ==

当然还有用仿函数写比较准则
这在前面set,map都讲过,这里就不在写了

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

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

相关文章

MQTT 安全解析:构建可靠的物联网系统

物联网逐渐渗透到医疗保健、智能家居、智慧城市、自动驾驶等我们生活中的各个领域。这其中所涉及到的物联设备的安全也因此变得愈发重要。一旦物联网系统遭到恶意入侵&#xff0c;不仅海量设备数据将面临丢失、被窃取和篡改等安全风险&#xff0c;使用这些设备和物联网应用的终…

Githubs的使用方法(创建仓库\分支\提交【增删改查】\拉取与合并\管理与clone代码\修改分支等操作)

Githubs的使用方法 一、github基本使用 这一小节主要介绍github的基本使用方法以及每一步的流程和作用。 1. 创建仓库 2. 创建分支 此时有两个分支&#xff1a;main 和 readme-edits。 现在&#xff0c;它们看起来完全相同。 接下来&#xff0c;将向新分支添加更改。 3. 创…

Vue3 项目实例(一)ElementPlus+ pinia+vite创建

项目搭建 热重载&#xff1a;将一个项目切分成多个JS&#xff0c;同时利用浏览器的协商缓存。 etag: 文件唯一标识 如果某一片代码没有改变&#xff0c;devServer返回304&#xff0c;浏览器继续使用原来的文件&#xff0c;否则&#xff0c;返回200&#xff0c;响应新的js文件…

RK3568平台开发系列讲解(调试篇)IS_ERR函数的使用

🚀返回专栏总目录 文章目录 一、IS_ERR函数用法二、IS_ERR函数三、内核错误码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 IS_ERR 函数的使用。 一、IS_ERR函数用法 先看下用法: 二、IS_ERR函数 对于任何一个指针来说,必然存在三种情况: 一种是合…

知识图谱:Neo4j数据库的基本使用——创建张学良的关系谱

一、知识图谱及Neo4j数据库介绍 知识图谱&#xff08;Knowledge Graph&#xff09;是人工智能的重要分支技术&#xff0c;它在2012年由谷歌提出&#xff0c;是结构化的语义知识库&#xff0c;用于以符号形式描述物理世界中的概念及其相互关系&#xff0c;其基本组成单位是“实体…

4.1派生类的概念

&#xff1a;为什么使用继承 所谓继承就是从先辈处得到属性和行为特征。类的继承就是新的类从已有类那里得到已有特征。这样做的目的是&#xff1a;减少代码的重复。 派生类的声明 声明派生类的一般公式 &#xff1a; class 派生类名:[继承方式] 基类名 { 派生类新增的数据成…

Java并发基石_CAS原理实战02_CAS实现原理

文章目录什么是CAS&#xff1f;CAS的实现原理是什么&#xff1f;cmpxchg指令怎么保证多核心下的线程安全&#xff1f;什么是ABA问题&#xff1f;如何解决ABA问题呢&#xff1f;什么是CAS&#xff1f; CAS&#xff0c;全称CompareAndSwap&#xff0c;比较并替换。 CAS包含了三个…

MyBatis --- 缓存、逆向工程、分页插件

一、MyBatis的缓存 1.1、MyBatis的一级缓存 一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就会从缓存中直接获取&#xff0c;不会从数据库重新访问 使一级缓存失效的四种情况&#xff1a; 1、…

MySQL高级第十二篇:数据库事物概述和隔离级别

MySQL高级第十二篇&#xff1a;数据库事物概述和隔离级别一、数据库事物概述1. SHOW ENGINES 查看存储引擎2. 事物ACID特性原子性&#xff08;atomiity&#xff09;一致性&#xff08;consistency&#xff09;&#xff1a;隔离性&#xff08;isolation&#xff09;持久性&#…

使用java实现自动扫雷

写在前面 本项目已在github开源&#xff0c;链接https://github.com/QZero233/JavaAutoMinesweeper 本文的写作风格可能会有些奇怪&#xff0c;这是笔者的一次全新的尝试&#xff0c;后续会换回写blog的文风的 摘要 本文提出了一个全自动完成扫雷游戏的解决方案&#xff0c;…

【Kubernetes】 多云管理策略解析

文章目录Kubernetes 多云的实现1. 前言1.1 Kubernetes 多云的现实需求2. Kubernetes 多云的架构设计2.1 跨云 Kubernetes 的挑战2.1.1 不同云厂商的接口不兼容2.1.2 多云环境中的安全问题2.1.3 跨云环境中的网络问题2.2 Kubernetes 多云的架构设计2.2.1 统一网络管理2.2.2 使用…

新能源汽车高压配电管理(PDU/BDU)

一、概念与组成 PDU(Power Distribution Unit)&#xff0c;即高压配电单元&#xff0c;功能是负责新能源车高压系统中的电源分配与管理&#xff0c;为整车提供充放电控制、高压部件上电控制、电路过载短路保护、高压采样、低压控制等功能&#xff0c;保护和监控高压系统的运行…

MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法

错误场景 最近在开发React的前端微应用&#xff0c;启动时模块构建报错Module build failed&#xff0c; Error: EMFILE: too many open files, 如下图所示&#xff1a; Error: EMFILE: too many open files的错误&#xff0c;经排查是因为单个微应用项目较大&#xff0c;发…

【Linux安装数据库】Ubuntu安装mysql并连接navicat

Linux系统部署Django项目 文章目录Linux系统部署Django项目一、mysql安装二、mysql配置文件三、新建数据库和用户四、nivacat链接mysql一、mysql安装 linux安装mysql数据库有很多教程&#xff0c;根据安装方式不同&#xff0c;相关的步骤也不同。可以参考&#xff1a;【Linux安…

前端基础(HTML、CSS、JS、jQuery)

文章目录一、HTML基础1.1 常用标签&#xff08;表格、表单、按钮等&#xff09;1.2 其他一些标签&#xff08;书签、显示效果、缩写等&#xff09;二、CSS基础2.1 CSS引入方式2.2 CSS选择器2.3 CSS常用属性三、JavaScript3.1 JS使用方式3.2 变量和数据类型3.3 函数、作用域、条…

Unity基础框架从0到1(五)延时任务调度模块

索引 这是Unity基础框架从0到1的第五篇文章&#xff0c;前面的文章和对应的视频我一起列到这里&#xff1a; 文章 Unity基础框架从0到1 开篇 Unity游戏框架从0到1 (二) 单例模块 Unity基础框架从0到1&#xff08;三&#xff09;高效的全局消息系统 Unity基础框架从0到1&a…

CentOS 7 DNS服务器架设

CentOS 7 DNS服务器部署 项目背景和要求 要保证即能够解析内网域名linuxidc.local的解析&#xff0c;又能解析互联网的域名。 主DNS服务器&#xff1a;ZZYH1.LINUXIDC.LOCAL 辅助DNS服务器&#xff1a;ZZYH2.LINUXIDC.LOCAL 包含以下域的信息&#xff1a; 1、linuxidc.lo…

mybatis多表联查(一对一、一对多/多对一、多对多)

mybatis多表联查(一对一、一对多/多对一、多对多) 在开发过程中单表查询往往不能满足需求分析的很多功能&#xff0c;对于比较复杂业务来说&#xff0c;关联的表有几个&#xff0c;甚至是几十个并且表与表之间的关联相当复杂。为了能够实现复杂的功能业务&#xff0c;就必须进…

Java 并发工具合集 JUC 大爆发!!!

并发工具类 通常我们所说的并发包也就是 java.util.concurrent (JUC)&#xff0c;集中了 Java 并发的各种工具类&#xff0c; 合理地使用它们能帮忙我们快速地完成功能 。 1. CountDownLatch CountDownLatch 是一个同步计数器&#xff0c;初始化的时候 传入需要计数的线程等待数…

Monaco Editor编辑器教程(二七):集成多个GitLab编辑器颜色样式主题

前言 在开发编辑器时,未来满足开发者的审美需求,有时需要设计多套颜色主题,最基础的是黑色主题和白色主题。如果用户愿意出钱的话,可以加上一些其他花里胡哨的颜色主题,在vscode中是可以搜到。今天就来教大家一些,如何借助现成的资源来为自己的monaco编辑器增加丰富的颜…