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

STL迭代器标签

STL(标准模板库)迭代器标签是用来标识迭代器类型的分类机制。这些标签有助于确定迭代器的特性,比如它是否可以进行随机访问、是否支持修改元素等。主要的迭代器标签包括:

  1. Input Iterator:只读迭代器,可以顺序读取元素。
  2. Output Iterator:只写迭代器,可以顺序写入元素。
  3. Forward Iterator:可读写迭代器,可以多次遍历元素。
  4. Bidirectional Iterator:可以向前和向后遍历元素。
  5. Random Access Iterator:支持任意位置访问,允许对元素进行随机访问。

迭代器标签示例

以下是一个自定义迭代器的示例,展示如何使用迭代器标签来实现不同类型的迭代器。

自定义迭代器代码示例
#include <iostream>
#include <iterator>
#include <vector>
#include <type_traits>// 自定义迭代器标签
struct MyRandomAccessIteratorTag {};template <typename T>
class MyRandomAccessIterator {
public:using iterator_category = MyRandomAccessIteratorTag; // 标签using value_type = T;using difference_type = std::ptrdiff_t;using pointer = T*;using reference = T&;MyRandomAccessIterator(pointer ptr) : ptr_(ptr) {}// 解引用运算符reference operator*() const { return *ptr_; }pointer operator->() const { return ptr_; }// 前缀递增运算符MyRandomAccessIterator& operator++() {++ptr_;return *this;}// 后缀递增运算符MyRandomAccessIterator operator++(int) {MyRandomAccessIterator tmp = *this;++(*this);return tmp;}// 随机访问运算符reference operator[](size_t index) const { return *(ptr_ + index); }// 比较运算符bool operator==(const MyRandomAccessIterator& other) const { return ptr_ == other.ptr_; }bool operator!=(const MyRandomAccessIterator& other) const { return ptr_ != other.ptr_; }private:pointer ptr_;
};// 自定义容器
template <typename T>
class MyContainer {
public:using iterator = MyRandomAccessIterator<T>;void add(const T& value) {data_.push_back(value);}iterator begin() { return iterator(data_.data()); }iterator end() { return iterator(data_.data() + data_.size()); }private:std::vector<T> data_;
};int main() {MyContainer<int> container;container.add(1);container.add(2);container.add(3);for (auto it = container.begin(); it != container.end(); ++it) {std::cout << *it << " "; // 输出: 1 2 3}std::cout << std::endl;// 使用随机访问功能auto it = container.begin();std::cout << it[1] << std::endl; // 输出: 2return 0;
}

示例解释

  1. 自定义迭代器
    • MyRandomAccessIterator 类实现了一个随机访问迭代器。它定义了标签 MyRandomAccessIteratorTag,以及相关的类型别名(如 value_typepointer)。
    • 迭代器支持解引用、前缀和后缀递增、随机访问以及比较操作符。
  2. 自定义容器
    • MyContainer 类包含一个 std::vector 作为内部存储,并提供 beginend 方法,返回自定义迭代器。
  3. 主函数
    • 创建了一个 MyContainer 实例,添加了一些整数,并使用迭代器遍历容器中的元素。
    • 演示了随机访问功能,使用 operator[] 访问特定元素。

总结

STL迭代器标签是一个重要的概念,它有助于分类和优化迭代器的行为。通过实现自定义迭代器和容器,您可以了解标签的作用以及如何在实际代码中使用它们。这个机制使得算法可以根据迭代器的特性选择最优的实现,从而提高性能和灵活性。

相关文章:

STL迭代器标签

STL&#xff08;标准模板库&#xff09;迭代器标签是用来标识迭代器类型的分类机制。这些标签有助于确定迭代器的特性&#xff0c;比如它是否可以进行随机访问、是否支持修改元素等。主要的迭代器标签包括&#xff1a; Input Iterator&#xff1a;只读迭代器&#xff0c;可以顺…...

容器学习之SparseArray源码解析

1、SparseArray是android sdk 提供集合类&#xff0c;主要用来替换key 为int类型&#xff0c;value为Object类型的Hashmap 2、SparseArray和HashMap相比优缺点&#xff1a; 优点&#xff1a; 1、SparseArray存在一个int[]keys, 因此避免自动装箱 2、SparseArray扩容时只需要数…...

信创改造技术介绍

目录 服务发现和注册 Sentinel 核心功能 典型应用场景 gateway 网关的主要功能 Spring Cloud Gateway Kong Kong 的主要功能 Kong 的架构&#xff1a; Kong 的使用场景&#xff1a; Kong 的部署模式&#xff1a; 优势 Gateway与Sentinel区别 Gateway Sentinel …...

【可见的点——欧拉函数】

在数论&#xff0c;对正整数n&#xff0c;欧拉函数是小于或等于n的正整数中与n互质的数的数目&#xff08;不包括1&#xff09; 题目 思路 有三个点比较特殊&#xff08;因为一来这三个点一定可见&#xff0c;同时也无法用gcd 1判断&#xff09;&#xff1a;&#xff08;0&am…...

Maven重点学习笔记(包入门 2万字)

Maven依赖管理项目构建工具 尚硅谷 5h 2023最新版 一&#xff0c;Maven简介 1.为什么学习Maven 1.1, Maven是一个依赖管理工具 1️⃣ jar包的规模 随着我们使用越来越多的框架&#xff0c;或者框架封装程度越来越高&#xff0c;项目中使用的jar包也越来越多。项目中&…...

1.分页查询(后端)—— Vue3 + SpringCloud 5 + MyBatisPlus + MySQL 项目系列(基于 Zulu 11)

本手册是基于 Vue3 SpringCloud5 MyBatisPlus MySQL 的项目结构和代码实现&#xff0c;旨在作为一个教学案例进行讲解。为了使案例更具普适性&#xff0c;文档中的公司名称、实体类、表名以及字段名称等敏感信息均已脱敏。 项目结构概述 项目采用标准的分层架构&#xff0…...

机器学习与深度学习的区别:深入理解与应用场景

在人工智能&#xff08;AI&#xff09;的广阔领域中&#xff0c;机器学习和深度学习是两个核心概念&#xff0c;它们虽然紧密相关&#xff0c;但在定义、技术、数据处理能力、应用场景等方面存在显著差异。本文将深入探讨这些区别&#xff0c;帮助读者更好地理解并选择合适的技…...

C++学习笔记(45)

322、循环队列、信号量、生产/消费者模型的源代码 一、demo1.cpp // demo1.cpp&#xff0c;本程序演示循环队列的使用。 #include "_public.h" int main() { using ElemTypeint; squeue<ElemType,5> QQ; ElemType ee; // 创建一个数据元素。 cout << &qu…...

【2】图像视频的加载和显示

文章目录 【2】图像视频的加载和显示一、代码在哪写二、创建和显示窗口&#xff08;一&#xff09;导入OpenCV的包cv2&#xff08;二&#xff09;创建窗口&#xff08;三&#xff09;更改窗口大小 & 显示窗口&#xff08;四&#xff09;等待用户输入补充&#xff1a;ord()函…...

1. BOOT.BIN 2. 固化 3. 启动 4. SDK 5. 文件

在进行FPGA的开发与固化过程中&#xff0c;生成BOOT.BIN文件是一个重要的步骤。BOOT.BIN文件通常包含了系统启动所需的不同文件&#xff0c;以下是如何创建和使用该文件的详细说明。 ### 生成BOOT.BIN文件的步骤 1. **方法一&#xff1a;通过项目构建** - 右键单击项目&#xf…...

vue按钮接收键盘回车事件

了解了&#xff01;如果您想让 Submit 按钮在按下回车键时被触发&#xff0c;可以在 Vue 组件中监听全局的键盘事件。以下是实现这一功能的示例&#xff1a; 示例代码 <template><div><inputtype"text"v-model"inputValue"placeholder&qu…...

腾讯云点播及声音上传

文章目录 1、开通腾讯云点播2、获取腾讯云API密钥3、完成声音上传3.1、引入依赖3.2、参考&#xff1a;接入点地域3.3、参考&#xff1a;任务流设置3.4、首先修改配置&#xff1a;3.4.1、 3.5、TrackInfoApiController --》 uploadTrack()3.6、VodServiceImpl --》 uploadTrack(…...

如何查看服务器是否有raid阵列卡以及raid类型

要查看服务器是否配置了RAID阵列卡以及RAID的类型&#xff0c;可以使用多种方法。以下是一些常用的命令和步骤&#xff1a; 1. 使用 lspci 命令 这个命令可以列出所有的PCI设备&#xff0c;包括RAID控制器。 lspci | grep -i raid 如果输出中有RAID相关的设备信息&#xff0c;那…...

工博会动态 | 来8.1馆 看桥田如何玩转全场

北京时间2024年9月24日&#xff0c;中国国际工业博览会开幕&#xff0c;桥田智能&#xff08;8.1馆A001&#xff09;推出心意三重奏&#xff0c;有没有小伙伴们发现呢&#xff1f;现在&#xff0c;让我们一起city walk下&#xff01; 桥田显眼包横空出道 有小伙伴已经发现&…...

新版torch_geometric不存在uniform、maybe_num_nodes函数问题(Prune4ED论文报错解决)

这是在复现论文“Towards accurate subgraph similarity computation via neural graph pruning”时遇到的报错。 ImportError: cannot import name uniform from torch_geometric.nn.pool.topk_pool 一、报错原因 论文作者使用的是2.1.0版本的torch_geometric。而我安装了2.…...

实现简易 vuedraggable 的拖拽排序功能

一、案例效果 拖拽计数4实现手动排序 二、案例代码 <draggable:list"searchResult.indicator":group"{ name: indicators }"item-key"field"handle".drag-handle-icon"><divclass"field-item"v-for"(item…...

第L2周:机器学习|线性回归模型 LinearRegression:2. 多元线性回归模型

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 任务&#xff1a; ●1. 学习本文的多元线形回归模型。 ●2. 参考文本预测花瓣宽度的方法&#xff0c;选用其他三个变量来预测花瓣长度。 一、多元线性回归 简单线性回归&#xff1a;影响 Y 的因素唯一&…...

JavaScript的条件语句

if条件语句 if结构先判断一个表达式的布尔值&#xff0c;然后根据布尔值的真伪&#xff0c;执行不同的语句。所谓布尔值&#xff0c;指的是JavaScript 的两个特殊值&#xff0c;true表示真&#xff0c;false表示伪。 if语句语法规范 if(布尔值){语句;}var m3if(m3){console.l…...

vue3 vite模式配置测试,开发、生产环境以及代理配置

1、首先在根目录下创建三个文本文件&#xff1a;.env.development&#xff0c;.env.production&#xff0c;.env.test .env.development中的内容为&#xff1a; // 开发环境 .env.development NODE_ENV development VITE_APP_MODE development VITE_OUTPUTDIR dist_dev /…...

【rabbitmq-server】安装使用介绍

在 1050a 系统下安装 rabbitmq-server 服务以及基本配置;【注】:改方案用于A版统信服务器操作系统 文章目录 功能概述功能介绍一、安装软件包二、启动服务三、验证四、基本配置功能概述 RabbitMQ 是AMQP的实现,高性能的企业消息的新标准。RabbitMQ服务器是一个强大和可扩展…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...