C++迭代器和反向迭代器

2024-04-09

我正在写一个iterator(实际上是const_iterator对于我当前的对象,我还想创建一个reverse_const_iterator also.

我环顾四周,想看看如何做到这一点,然后我偶然发现this http://www.cplusplus.com/reference/iterator/reverse_iterator/:

但请注意,当迭代器反转时,反转的版本 不指向范围内的同一个元素,而是指向第一个 在它之前。之所以如此,是为了安排过去的结局 范围的元素:指向范围内最后一个元素的迭代器 范围在反转时会更改为指向最后一个元素(不是 过去)的范围(这将是范围的第一个元素,如果 颠倒)。如果范围中第一个元素的迭代器是 反转,反转迭代器指向第一个迭代器之前的元素 元素(这将是范围的最后元素,如果 颠倒)。

从用户的角度来看,或者当您取消引用 a 时,会发生这种情况吗?reverse_iterator它不是通过为您提供对象的值/引用来抽象化这一点吗?think它指的是?这只是实施细节吗?

我的理解是:

for(i = obj.rbegin(); i != obj.rend(); i++)

相当于

for(i = obj.begin(); i != obj.end(); i++)

除非相反。所以*i在第一种情况下将向后穿过容器,在第二种情况下将向前穿过容器。我的直觉正确吗?


你说得对,这是一个抽象。反向迭代器包含一个普通迭代器,该迭代器指向取消引用该对象后将获得的对象后面的元素。然而,这不仅仅是一个实现细节。这std::reverse_iterator适配器提供成员函数调用base它返回底层迭代器。

该标准定义了std::reverse_iterator作为迭代器适配器,与其适配的迭代器具有以下关系:

反向迭代器与其对应的迭代器 i 之间的基本关系由以下恒等式建立:&*(reverse_iterator(i)) == &*(i - 1)

常见用途为base正在从容器中删除一个元素,具体操作如下:

it++;
lst.erase(it.base());

如果您想在反向迭代容器时执行此操作,您可以这样做:

it++;
std::list<int>::reverse_iterator(lst.erase(it.base()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++迭代器和反向迭代器 的相关文章

  • 使用 ## 和 __LINE__ 创建 C 宏(与定位宏的标记串联)

    我想创建一个 C 宏来创建一个基于名称的函数 在行号上 我想我可以做类似的事情 真正的函数在大括号内有语句 define UNIQUE static void Unique LINE void 我希望能扩展到类似的内容 static voi
  • 函数“sum”的隐式声明在 C99 中无效

    我一直在寻找解决方案 但没有找到任何有帮助的东西 我收到以下错误 Implicit declaration of function sum is invalid in C99 Implicit declaration of function
  • 为什么模板类的静态成员不唯一

    看一下下面的代码 include
  • 如何在 Asp.Net Core 6 中向类型化 HttpClient 添加承载令牌身份验证

    我正在尝试使用 ASP Net Core 6 设置一个 Web api 以便用户可以到达我的端点 然后我使用特权帐户在幕后的 D365 中执行一些工作 我正在使用类型化的 HTTP 客户端 但我不确定如何插入承载身份验证 以便来自该客户端的
  • ptrace和waitpid有什么关系?

    我正在练习使用ptrace但我不太了解它和之间的关系waitpid 这是我的测试程序 int main int argc char argv pid t pid 22092 if ptrace PTRACE ATTACH pid NULL
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • C 中的双重否定:是否保证返回 0/1?

    Is x 标准保证返回0 1 请注意 我是not询问 C 其中定义了 bool 类型 是的 在 C99 中 请参阅 6 5 3 3 4 逻辑非运算符的结果 是0如果其操作数的值比较 不等于0 1如果其操作数的值比较等于 0 结果具有类型in
  • 如何从命名空间内重载运算符<<

    这是我能想到的最小的包含示例 首先是类的标题 每当使用 pragma once ifndef EURO H define EURO H include
  • 我如何模拟 UserManager 和 RoleManager 进行单元测试

    我模拟了抽象类来测试类的具体方法 如下所示 var mock new Mock
  • VS C# 中的依赖地狱,找不到依赖项

    我创建了一个图表 C 库 我们称之为chartlibrary 它本身依赖于多个第三方 dll 文件 在另一个可执行项目中 我们称之为chartuser 我参考了chartlibrary项目 两个项目位于 Visual Studio 中的同一
  • 使用 C# 的异步 WebRequest

    您好 我有一个函数 它将 url Get 参数传递到网络服务器上的 php 文件 并等待文件的响应 通常需要 10 20 秒 我想将其放入一个循环中 因为我必须一次将这些 Get 请求发送到大约 5 个不同的 php 文件 但是当我尝试将其
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

    我有哪些使用选择std get lt gt and std tie lt gt 与增强结构一起 例子 我想使用基于范围的 for 循环在多个容器上进行迭代 我可以实施zip函数 它使用boost zip iterator include
  • 为什么将未使用的返回值转换为 void?

    int fn void whatever void fn 是否有任何理由将未使用的返回值强制转换为 void 或者我认为这完全是浪费时间 David s answer https stackoverflow com questions 68
  • 为什么在 C++ 类中的数据成员上使用像 m_ 这样的前缀?

    许多 C 代码使用语法约定来标记数据成员 常见的例子包括 m memberName对于公共成员 在所有使用公共成员的情况下 memberName对于私人会员或所有会员 其他人尝试强制使用this gt member每当使用数据成员时 根据我
  • 智能感知不显示评论

    如果我在 Visual Studio 2010 中输入类似的内容数据集1 我得到所有可用方法和属性的列表 智能感知 这很好用 但是 如果我在此列表中选择一个方法或属性 我不会得到 if 的描述 例如 如果我有类似的东西 public cla
  • 为什么 getch 不可移植?

    是什么使得 getch 本质上无法作为标准 C 函数包含在内 对于控制台界面来说 它是如此直观和优雅 如果没有它 要求输入单个字符总是会产生误导 因为用户可以输入多个键 更糟糕的是 您经常需要确保在读取控制台输入后清除标准输入 这甚至不是作
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int
  • Python 中的迭代器 (iter()) 函数。 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 对于字典 我可以使用iter 用于迭代字典的键 y x 10 y 20 for val in iter y print val 当
  • 使用 ImageResizer 获取图像尺寸的最佳方法

    我正在将现有的 MVC 4 网站从自制用户文件上传切换为在上传时使用 ImageResizer 调整文件大小 我在文档中看到我不应该使用 System Drawing 但我无法找出任何其他获取图像尺寸的方法 尺寸是来自原始图像还是调整大小的

随机推荐

  • Cloud PubSub 重复消息触发的 Cloud Functions

    我正在尝试使用 Cloud Functions 作为由 PubSub 触发的异步后台工作程序 并执行更长的工作 以分钟为单位 完整的代码在这里https github com zdenulo cloud functions pubsub h
  • 如何在我的代码中找到 CoffeeScript 1.9.0 重大更改的情况?

    TL DR 是否有任何方法可以识别对 CoffeeScript 的新 1 9 0 行为的违规行为 foo参数命名 现在使用裸露的代码是非法的 并且不会导致警告 错误foo函数中的变量 在CoffeeScript 1 9 0版本中声明 更改了
  • 使用数据值在 d3 js 条形图中添加背景颜色

    我创建了一个非常简单的条形图 现在 我想向创建的条形图添加一些样式 如示例所示 我想在x值大于200时添加红色 我尝试了各种样式填充和背景 但无法获得预期结果 现在知道如何处理吗 添加了代码
  • 在新窗口中打开链接或如果已打开则将焦点移至该链接

    我有一个应该在新选项卡中打开的链接 但如果该选项卡已打开 只需切换到它即可 我尝试过使用 javascript wnd window open 和 wnd focus 它们适用于 Chrome 19 但不适用于 FF 13 或 IE 9 这
  • Pythonic 方式打印列表项

    我想知道是否有比这更好的方法来打印 Python 列表中的所有对象 myList Person Foo Person Bar print n join map str myList Foo Bar 我读这种方式不太好 myList Pers
  • mscorlib.dll 是 CLR 吗?

    如果这不是我几乎可以肯定的 那么 mscorlib dll 的作用是什么以及 CLR 位于哪里 CLR不在mscorlib dll but in MSCorEE dll 我想这就是你正在寻找的 这是加载 NET exe 程序集时加载的主 D
  • Rails form_withhidden_​​field 值对新对象进行了加密

    我有一个用于创建新模型的简单表单 该模型有一个属性panel这是在控制器中设置的 我认为这应该不重要 但是panel是一个枚举 def new order Order new panel params panel end 在视图中 我创建了
  • Windows NTFS 上的 Files.walkFileTree 与 Files.walk 性能比较

    我的应用程序 https komga org 需要定期扫描文件系统以处理文件 最初我使用的是java nio file Files walk执行扫描 但很快我就遇到了一些问题AccessDeniedException 发现 https ma
  • 如何使用 python API 列出所有数据流作业

    我的用例涉及获取项目中存在的所有流数据流作业的作业 ID 并取消它 更新我的数据流作业的源并重新运行它 我正在尝试使用 python 来实现这一点 直到现在我还没有遇到任何有用的文档 我想到使用 python 的库子进程来执行 gcloud
  • .mobileprovision 的 MIME 类型是什么

    mobileprovision 文件类型的正确 MIME 类型 IIS 是什么 我的想法正确吗 如果我必须将每个人的设备连接到 mac 开发机器来安装 mobileprovision 文件 那么它就违背了无线临时分发方法的目的 如果没有特定
  • 如何在状态栏中获得永久的应用程序通知程序?

    我在互联网上搜索了很多 但找不到正确的答案 我在 Android 手机上使用过 3G Watchdog 和 Advanced Task Killer 等应用程序 我注意到 当状态栏最小化时 它们总是有一个图标 并且还有一个无法从状态栏清除的
  • Bootstrap 模式隐藏不起作用

    Bootstrap 模式隐藏不起作用 警报来自其他地方 但我的模式没有隐藏添加了引导层 我的问题也是同样的问题
  • Google 地图 v3 地理编码服务器端

    我正在使用 ASP NET MVC 3 和 Google 地图 v3 我想在一个动作中进行地理编码 即将有效地址传递给 Google 并获取纬度和经度 我见过的所有关于地理编码的在线示例都涉及客户端地理编码 您将如何使用 C 在操作中执行此
  • 访问控制允许来源错误..(使用 cordova)

    我正在尝试网络服务器和客户端 混合应用程序 使用cordova 但是 Access Control Allow Origin 错误 所以我下载了 chrome 扩展程序 cors 但不起作用 服务器 js var app require e
  • 所有应用程序在断开连接时崩溃[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 突然之间 当我断开连接 iMac 和 iPhone 的电线时 我构建并发送到手机的任何应用程序都会立即崩溃 并且也没有任
  • 刷新物化视图时,索引是否也会自动刷新?

    我目前使用的是 Postgres 9 3 3 If you refresh物化视图 该物化视图上的索引是否也重新索引 或者是否需要手动重新索引索引 在查看以下内容时question https stackoverflow com quest
  • PHP服务器统计脚本? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我不太确定把这个问题放在哪里 它不是真正的网络应用程序或超级用户 但我确信类似的东西已经存在 我正在寻
  • 在android中使用Google Drive api获取在Google Drive上创建的文件的大小

    我创建了应用程序 使用该应用程序用户将能够从 Google 驱动器获取列表中的所有文件并能够下载它 现在 用户可以下载已上传到驱动器的文件 并带有进度计数 但我无法获取在 Goolge 驱动器上创建的文件的大小 例如文档 演示文稿 电子表格
  • Android UI 测试期间“未找到测试”

    如果我有时想通过右键单击测试然后选择运行来运行单个测试 测试结果将显示 未找到测试 并显示与 线程 main java lang NoClassDefFoundError 中的异常 相关的错误 我发现这种情况只发生过几次 为什么会发生这种情
  • C++迭代器和反向迭代器

    我正在写一个iterator 实际上是const iterator对于我当前的对象 我还想创建一个reverse const iterator also 我环顾四周 想看看如何做到这一点 然后我偶然发现this http www cplus