基于范围的 for 循环对性能有益吗?

2024-05-24

阅读 Stack Overflow 上有关 C++ 迭代器和性能**的各种问题后,我开始想知道是否for(auto& elem : container)被编译器“扩展”成最好的版本? (就像auto,编译器立即将其推断为正确的类型,因此永远不会更慢,有时甚至更快)。

** 例如,如果你写这样有关系吗?

for(iterator it = container.begin(), eit = container.end(); it != eit; ++it)

or

for(iterator it = container.begin(); it != container.end(); ++it)

对于非失效容器?


标准是您的朋友,请参阅[stmt.范围]/1

对于以下形式的基于范围的 for 语句

for ( for-range-declaration : expression ) statement

让 range-init 等价于括号括起来的表达式

( expression )

以及基于范围的 for 语句的形式

for ( for-range-declaration : braced-init-list ) statement

让 range-init 等同于花括号初始化列表。在每种情况下,基于范围的for语句相当于

{
  auto && __range = range-init;
  for ( auto __begin = begin-expr,
             __end = end-expr;
        __begin != __end;
        ++__begin )
  {
    for-range-declaration = *__begin;
    statement
  }
}

所以,是的,该标准保证实现最佳的形式。

对于许多容器,例如vector,在此迭代期间修改(插入/删除)它们是未定义的行为。

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

基于范围的 for 循环对性能有益吗? 的相关文章

随机推荐

  • Play框架2.3.x服务器错误无法注册类

    我最近在服务器上上传了 Play 应用程序 问题是我可以通过命令运行应用程序激活器运行它编译并运行良好 当我尝试做的时候活化剂洁净阶段它也编译但之后目标 通用 阶段 bin name of myapp它会抛出一个错误 例如 Oops can
  • 如何在android 6.0中重复闹钟

    我正在使用setExactAndAllowWhileIdle 设置闹钟 但它只能工作一次 如何设置间隔 1 天的重复闹钟 API 级别 23 之前setInexactRepeating方法工作正常 当您的广播接收器事件正在执行时 为您的闹钟
  • 动态更改复选框不会触发onChange?

    注意 jQuery 不是一个选项 我想检测复选框状态的变化 但是当我这样做时 onChange 事件似乎没有触发 document getElementById myCheckBox addEventListener change func
  • 如何使用远程访问 API 获取 jenkins 的系统配置

    詹金斯提供了很好的远程访问API https wiki jenkins ci org display JENKINS Remote access API 可用于获取大量信息 例如作业和视图 我想知道是否或如何从远程访问 API 获取系统 全
  • Node.js console.log - 是否可以更新一行而不是创建新行?

    My node js应用程序有很多控制台日志 这对我来说很重要 这是一个相当大的应用程序 因此运行很长时间 我需要知道事情仍在进展 但我最终得到了数千行控制台日志 是否有可能做一个console update删除 替换控制台行而不是创建新行
  • Metallib:读取模块时出错:无效的位码签名

    我有以下 Filter metal 文件 include
  • 通过并行任务库限制运行的活动任务数量的最佳方法

    考虑一个队列持有lot需要处理的作业 队列的限制是一次只能获取 1 个作业 并且无法知道有多少个作业 这些作业需要 10 秒才能完成 并且需要大量等待 Web 服务的响应 因此不受 CPU 限制 如果我使用这样的东西 while true
  • 获取 ngrx 中的当前状态

    我正在尝试使用一个最小的示例来打印 ngrx 中的当前状态 interface AppState counter number export function Reducer state AppState counter 0 action
  • 无法使用 lld-link.exe 链接 C 运行时库 (libcmt.lib) (Windows)

    我正在使用 LLVM 编写一种语言 我想避免打包 clang 并简单地使用 LLVM 工具 例如 lld lld link 我一直在尝试调用printf来自我的简单 IR 代码的函数 testinput ll ModuleID Test2
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • jQuery.ready() 中应该包含什么内容,哪些内容应该在 jQuery.ready() 之外?

    jQuery ready 中应该包含哪些内容 哪些内容应该包含在 jQuery ready 之外 从性能的角度来看 我在某处读到将所有代码都包装在一个jQuery ready 这不是一个有效的方法 那么我的问题是 什么应该在里面 什么可以在
  • Java EE 企业应用程序:在部署/启动时执行一些操作[重复]

    这个问题在这里已经有答案了 我想在部署我的应用程序 具有业务逻辑 EJB 和客户端 Web 的企业应用程序 后立即执行某些操作 例如 我想让某个实体处于持久状态 或者以其他方式创建一个文件 我怎样才能做到这一点 Thanks 配置Serlv
  • Angular 4:在订阅中收到错误消息

    在服务中 有这样的代码 getUser id return this http get http id map res gt res json 在组件中 this myService getUser this id subscribe cu
  • HandleBars 检查 Each 中的索引是否可以被四整除

    对把手不太熟悉 但我在报告设置中使用它 并处理要打印的输出 我正在打印的文档每页应该有四份 所以我想做一个像if index 4 0 但我有点不确定该怎么做 我正在浏览一系列对象 each dataset 这是基本布局 以及我对每页四页报告
  • @Context 注入在 Je​​rsey ContainerRequestFilter 中不起作用(Dropwizard)

    Context 注入适用于类 但无法使其适用于对象 ContainerRequestFilter 中的 httpServletRequest 产生空指针 Dropwizard 版本 1 1 0 容器请求过滤器 public class Ap
  • 比较 2 个对象并检索具有不同值的字段列表

    给定一个具有 35 个字段的类和 2 个具有一定数量的不同字段值的对象 有没有一种聪明的方法来获取带有字段名称的列表 其中对象如下所示 e g obj1 Name aaa obj1 LastName bbb obj1 Address xcs
  • 在 Ruby 中转义字符串

    我想在某些 Ruby 中插入以下内容作为变量的值 lt gt 用双引号将其引起来是行不通的 那么是否有一个很好的 escape until the end 之类的东西可用 不要使用多种方法 保持简单 转义 反斜杠和双引号 irb main
  • 试驾 Nancy 模块

    好的 我喜欢 NancyFx 用这么几行代码编写一个 Web 应用程序真是太棒了 但是如何在单元级别上测试驱动 NancyModule 请注意 我知道优秀的测试框架 https github com NancyFx Nancy wiki T
  • 电报频道的帖子观看次数[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想了解有关电报频道的帖子浏览计数系统的更多信息 它是如何工作的 与此相关的API VB 部分是什么 我也有这个疑问 为了得到答案 我
  • 基于范围的 for 循环对性能有益吗?

    阅读 Stack Overflow 上有关 C 迭代器和性能 的各种问题后 我开始想知道是否for auto elem container 被编译器 扩展 成最好的版本 就像auto 编译器立即将其推断为正确的类型 因此永远不会更慢 有时甚