C++ STL-迭代器函数对象适配器

目录

一.迭代器

二. 函数对象

三. 适配器


一.迭代器

是一种通用的指针类型,可以用来遍历 STL 容器中的元素。

具有以下作用和意义:

  1. 提供一种通用的方式来访问容器中的元素。
  2. 允许对不同类型的容器进行统一的操作。
  3. 增强了代码的灵活性和可扩展性。

一些常用的 API 及其详解如下:

  • begin():返回容器中第一个元素的迭代器。
  • end():返回超出容器末尾的迭代器。
  • ++iter:向前移动迭代器。
  • --iter:向后移动迭代器。

下面是一个简单的示例代码:

#include <vector>
#include <iostream>int main() {std::vector<int> numbers = { 1, 2, 3, 4, 5 };std::vector<int>::iterator iter = numbers.begin();while (iter != numbers.end()) {std::cout << *iter << " ";++iter;}return 0;
}

在这个示例中,通过迭代器 iter 遍历了 numbers 容器中的每个元素,并输出它们。

二. 函数对象

是一种可调用的对象,用于各种算法中。

作用和意义

  1. 提供了一种通用的方式来传递自定义的操作。
  2. 增强了算法的灵活性和可扩展性。
  3. 可以封装复杂的逻辑,使代码更简洁、易维护。

常用 API 详解

  • operator():用于定义函数对象的调用操作。
  • 可以接受参数,并返回特定类型的结果。

下面是一个简单的示例代码:

#include <algorithm>
#include <vector>
#include<iostream>// 自定义函数对象,用于比较两个整数的大小
struct IntComparer {bool operator()(int a, int b) {return a < b;}
};int main() {std::vector<int> numbers = { 5, 3, 1, 4, 2 };// 使用自定义的函数对象进行排序std::sort(numbers.begin(), numbers.end(), IntComparer());// 输出排序后的元素for (int num : numbers) {std::cout << num << " ";}return 0;
}

在上述示例中,定义了一个自定义的函数对象 IntComparer,它实现了比较两个整数大小的逻辑。然后,使用这个函数对象作为参数传递给 std::sort() 算法,对 numbers 容器进行排序。

三. 适配器

是一种将一个类或函数转换为符合特定需求的接口的工具。

作用和意义

  1. 提供了一种方便的方式来适配不同的需求。
  2. 增加了代码的灵活性和可重用性。
  3. 使得原本不符合特定接口的类或函数能够在特定场景中使用。

常用 API 详解

  • std::adapter:提供了一些常见的适配器类型,如stackqueue等。
  • push():向适配器中添加元素。
  • pop():从适配器中取出元素。

下面是一个简单的示例代码:

#include <stack>
#include <iostream>int main() {std::stack<int> myStack;myStack.push(5);myStack.push(3);myStack.push(1);while (!myStack.empty()) {int element = myStack.top();std::cout << element << " ";myStack.pop();}return 0;
}

在上述示例中,使用std::stack适配器来实现栈的操作。通过push()方法向栈中添加元素,通过pop()方法从栈中取出元素

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

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

相关文章

The Best Toolkit 最好用的工具集

The Best Toolkit 工欲善其事&#xff0c;必先利其器&#xff0c;整理过往工作与生活中遇到的最好的工具软件 PDF合并等 PDF24 Tools PDF查看器 SumatraPDF 可以使用黑色来查看&#xff0c;相对不伤眼睛&#xff0c;也有电子书相关的阅读器 Kindle pdf裁边工具 briss 软件卸载…

【C++题解】1085 - 寻找雷劈数

问题&#xff1a;1085 - 寻找雷劈数 类型&#xff1a;for循环 题目描述&#xff1a; 把整数 3025 从中剪开分为 30 和 25 两个数&#xff0c;此时再将这两数之和平方&#xff0c;计算结果又等于原数。 (3025)(3025)55553025 &#xff0c;这样的数叫“雷劈数”。 求所有符合这…

Photoshop版本选择及系统要求

1、ps2018cc/2020cc版本 适合新手&#xff0c;增加了很多智能化操作&#xff0c;非常方便好上手。 2020&#xff1a; 2、ps2015版本 cc2015版本不论是功能还是硬件上&#xff0c;都是不二选择&#xff0c;适合于配置较低的电脑&#xff0c;该有的基本功能它都有。 3、2021/2…

std::numeric_limits::max和宏定义重复报错问题

问题描述 今天在编译Beckhoff ADS开源组件的时候发现编译报错&#xff0c;报错代码如下 long AdsDevice::ReadReqEx2(uint32_t group, uint32_t offset, size_t length, void* buffer, uint32_t* bytesRead) const {if (length > std::numeric_limits<uint32_t>::ma…

Algorand 的复兴之路:改变游戏规则,打造 RWA 第一公链

TLDR 发布 AlgoKit 2.0&#xff0c;支持 Python 原生语言&#xff0c;打造开发者友好的开发环境&#xff0c;Algorand 的开发者社区规模迅速扩大。 升级共识激励机制&#xff0c;用 ALGO 奖励共识节点参与共识的执行&#xff0c;增加 ALGO 的应用场景&#xff0c;同时进一步确…

GB28181的主动、被动的含义

GB28181有点象视频会议&#xff1a; 终端通过SIP登录服务器。管理员点击某个终端&#xff0c;进行视频。 就是这个主动、被动没有听说。于是问了同事&#xff0c;他说&#xff1a; 主动被动是从服务器角度来看的。所谓被动&#xff0c;就是服务器开一个端口&#xff0c;被动接…

钢结构乙级资质延期,企业如何降低经营风险

当企业面临钢结构乙级资质延期时&#xff0c;为了降低经营风险&#xff0c;可以采取以下措施&#xff1a; 1. 提前规划与准备 资质延续规划&#xff1a;在资质到期前&#xff0c;提前规划资质延续的相关工作&#xff0c;包括准备所需材料、明确流程和时间节点等。 项目评估&…

js去重的几种方式

在JavaScript中&#xff0c;有多种方式可以实现数组去重。以下是几种常见的方式&#xff1a; 使用Set数据结构&#xff1a;使用Set可以快速实现数组去重&#xff0c;Set会自动排除重复的元素。例如&#xff1a; const arr [1, 2, 3, 3, 4, 4, 5]; const uniqueArr [...new S…

如何从官网下载 mysql 二进制安装包

一.下载二进行包 1. 官网网址: https://www.mysql.com/ 如图所示进入官网 2. 点击 DOWNLOADS ,进入如下图 在该页面找到 MySQL Community (GPL) Downloads 点进去 如上图页面&#xff0c;找到 MySQL Community Server 在点进去 下载 linux 通用版 点击最下面 Compressed …

(十四)统计学基础练习题八(选择题T351-400)

本文整理了统计学基础知识相关的练习题&#xff0c;共50道&#xff0c;适用于想巩固统计学基础或备考的同学。来源&#xff1a;如荷学数据科学题库&#xff08;技术专项-统计学三&#xff09;。序号之前的题请看往期文章。 351&#xff09; 352&#xff09; 353&#xff09; 3…

C++vector部分实现及感悟

myvector.h #pragma once #include<assert.h> #include<iostream> #include<vector> using namespace std; namespace bit {template<class T>//必须使用typename场景\template<typename T>与template<class T>一般情况下这两个通用&#…

Jmeter实战教程入门讲解

前言 通过前面对Jmeter元件的讲解&#xff0c;大家应该都知道常用元件的作用和使用了。编写Jmeter脚本前我们需要知道Jmeter元件的执行顺序&#xff0c;可以看看我这篇性能测试学习之路&#xff08;三&#xff09;—初识Jmeter来了解下。下面我将以工作中的一个简单的实例带大…

Flutter 中的 TableCell 小部件:全面指南

Flutter 中的 TableCell 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;TableCell 是一个用于创建表格单元格的组件…

企业打款验证API在Java、Python、PHP中的使用教程

随着企业银行账号数量的增加和银行间的连接方式不断丰富&#xff0c;企业在进行资金交易时需要确保所填写的收款方账户信息的准确性和合法性&#xff0c;以避免资金损失和风险。然而&#xff0c;由于银行数量众多、地域分布广泛&#xff0c;不同银行间的账户验证机制和信息交互…

vue前端实现页面禁止缩放 前端适配问题处理 前端项目多端适配解决方案

在前端项目中,如果一个系统页面可以缩放可能会导致多种异常情况,这些异常情况涉及到页面布局、元素尺寸、事件触发、响应式设计和用户体验等方面。 1.布局错乱:页面元素在缩放后可能会出现错位、重叠或部分隐藏的情况,导致页面布局混乱,影响用户对页面内容的理解和操作。这…

【云原生】kubernetes中secret原理详解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

读AI未来进行式笔记02深度伪造

1. 计算机视觉 1.1. 在人的六感之中&#xff0c;视觉是最重要的 1.1.1. 人类只要看上一眼视频&#xff0c;就能瞬间在脑海中抓取并消化内容和信息 1.1.2. 人类能够对事物进行广义的理解和抽象的认知&#xff0c;即使同一物体在不同的角度…

声量2024 | 内容创作者,该怎样保护你的知识产权

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 阿那亚 联合制作 / 声量The Power of Voice 特别鸣谢 / 深夜谈谈播客网络 本期节目录制于第二届「声量The Power of Voic…

opencascade 布尔运算笔记

BRepAlgoAPI_Common 对两个topods求解 没有公共部分也返回结果了 我想要的结果是没有公共部分返回false 在 Open CASCADE 中使用 BRepAlgoAPI_Common 进行布尔操作时&#xff0c;即使两个 TopoDS_Shape 没有公共部分&#xff0c;操作仍会返回一个结果。为了判断两个形状是否确…

vue3封装echarts组件---通俗易懂

1、封装的原因 如果在vue项目中有多个组件或者同个组件多出地方需要不同的图表&#xff0c;因此自己封装一个方便多次复用的Mycharts图表组件。 2、具体步骤&#xff1a; 2.1 安装echarts pnpm i echarts --save 2.2 新建MyCharts组件 : ~components/echarts/MyCharts.vu…