现代 C++ 方法重复代码设定次数

2023-11-26

很简单,是否有一种更简单的方法来重复一个块一定次数,其中块内部不需要计数器变量?简单的解决方案当然是

for (int i = 0; i < repetitions; ++i) {
  //do your thing, i is not used here
}

然而,既然我们已经考虑了标准算法和其他用于迭代容器的奇特构造,相比之下,这实际上开始感觉像是很多样板文件和细节,而这个案例应该是更简单的。例如我们对变量不感兴趣i根本等等

最接近具体问题的是:当我遇到上面这样的 for 循环时,我需要扫描代码块以查看是否i实际使用过,或者只是一个虚拟计数器。 for 循环的声明,它实际上想要对整数 0 到 执行某些操作repetitions - 1看起来会一模一样。所以一个repeat (n)-type 构造将具有额外的语义信息,即除了潜在的副作用之外,所有迭代都将相同。

一种选择是制作模板

template<class functor>
repeat(functor fun, unsigned n) {
   for (unsigned i = 0; i < n; ++i)
     fun();
}

and call

repeat([&](){
  //do your thing
}, repetitions)

但这似乎对于一个简单的问题来说确实是过度设计的杀伤力。这可以被宏观化以使使用更好一点,但这肯定不会有助于过度设计的感觉。

所以一个有效的答案是,我在这里白费力气,应该使用带有计数器的旧式 for 循环。

任何标准 C++ 都可以,包括即将推出的标准。

相关问题例如如何在 C++ 中创建循环一定次数的循环? and 如何在 C++ 中创建循环一定次数的循环?初学者要求某种方法来实现这一目标,而我特别要求一种现代、干净和优雅的方法来实现这一目标。C++重复N次迭代非常接近,尽管这里的区别是我要求任何替代方案,不一定包含在std::.


介绍

现代并不一定意味着使用新功能。

Solution

最简单的解决方案之一,使用简单for循环如下:

for (auto _ = times; _--;) [[likely]] statement;

…where:

  • times是一个常数整数字面量没有后缀(ie 3).
  • statement is a 陈述待执行times times.

Example

用法示例:

constexpr auto f(int Value) noexcept
{
    for (auto _ = 3; _--;) [[likely]] ++Value;
    return Value;
}

int main()
{
    constexpr auto i = f(2);
    return i;
}

持续的i变量声明的初始值为2,增加了3倍,增加了1f's for循环,取最终值5并用作程序返回值。

Notes

  • 一些编译器实现可能会使用[[likely]]未来的属性。
    If times常数可能为零,使用[[unlikely]]属性来代替。
    似然属性是c++20功能,在早期版本中跳过。
  • _name 通常用作无意义的名称来命名可丢弃的变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

现代 C++ 方法重复代码设定次数 的相关文章

  • WinForms:如何确定窗口是否不再活动(没有子窗口具有焦点)?

    我的应用程序使用多个窗口 我想隐藏一个特定窗口 以防应用程序失去焦点 当活动窗口不是应用程序窗口时 source https stackoverflow com questions 466354 how can i tell if a wi
  • 具有子列表属性映射问题的自动映射器

    我有以下型号 Models public class Dish Required public Int64 ID get set Required public string Name get set Required public str
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • VB.NET 连接字符串(Web.Config、App.Config)

    连接字符串真的很烦人 我在一个解决方案中同时拥有两个项目 充当表示层的 Web 表单应用程序以及支持它的类库 用于从数据库发送和接收数据 类库项目中的 Employee 类 Friend Class Employee Public Func
  • 如何将 JSON 对象推送到 JSONB 列中的嵌套数组

    我需要以某种方式将 JSON 对象推送到可能存在的 JSON 对象的嵌套数组 请参阅下面的 JSON 片段中的 页面 session id someuuid visitor ui 1 pages datetime 2016 08 13T19
  • 如何在 MathJax 中定义自定义宏

    我正在尝试定义 MathJax 中 LaTeX 文件中使用的自定义宏 可以定义简单的宏 单个参数 没有任何问题 例如 newcommand braket 1 langle 1 rangle as Macros braket langle 1
  • Spring MVC - 包括静态文件/ javascript 、 css

    我已经创建了 MVC 应用程序 我想将js或css文件包含到jsp中 我的静态文件位于 webapp js jquery js WEB INF jsp jsp 我的包含 jquery 的代码是 jquery js gt gt 我无法将 js
  • Android 权限和权限组之间的链接

    我是 Android 开发新手 我正在查看 android 清单权限 有两件事 权限和权限组 我知道该列表位于 http developer android com reference android Manifest permission
  • 具有并发请求的 Python XMLRPC

    我正在寻找一种方法来防止多个主机向 Python XMLRPC 侦听器同时发出命令 侦听器负责运行脚本以在该系统上执行任务 如果多个用户尝试同时发出这些命令 这些任务将会失败 有没有办法可以阻止所有传入请求 直到单个实例完成 我认为 pyt
  • 在 NSString 对象中查找子字符串

    我有一个 NSString 对象 我想通过定位一个单词来从中创建一个子字符串 例如 我的字符串是 狗吃了猫 我希望程序找到单词 ate 并创建一个子字符串 the cat 有人可以帮助我或给我一个例子吗 Thanks Sagiftw NSR
  • 使用 C# 列出回收站中的文件名,而不使用任何外部文件

    我想要一个使用 c 代码检索回收站 在 win 7 上 中的文件名的函数 该框架似乎没有包含任何内容来实现这一目标 目录 Getfiles 不会起作用 是吗 我发现自己有一个使用 windows shell32自动化 的代码 但这需要提供i
  • Play框架表单只有18个参数

    我观察到 当我向 Play Framework Form class 添加超过 18 个参数时 我会收到一个很长 对我来说难以理解 的编译错误 这是有记录的限制吗 我需要在表单帖子中接收多达 29 个参数 我不决定参数的设计和数量 因为我正
  • 如何将结构体成员设为私有?

    我在头文件中定义了一个结构 如下所示 typedef struct void data point 我想阻止其他人直接访问 data 所以我想我应该在 c 文件中声明结构并使用类似的东西extern typedef struct point
  • 模板中的 Django settings.py 变量

    我遇到了一个非常奇怪的错误 我在我的应用程序中定义了一个应用程序IDsettings py像这样的文件 CARDSPRING APP ID 这几乎适用于我网站上的每个页面 除了一个页面 奇怪的是 其他变量也起作用 在页面的脚本部分中 我有以
  • Android.mk - 构建目录中的所有源文件

    我正在使用 Android NDK 构建我的 cocos2dx 项目 在 Android mk 中 有一个 LOCAL SRC FILES 的定义 其中列出了每个 cpp 文件 每当我添加新的源文件时 我也需要将它添加到那里 它看起来像这样
  • SQL:如何为每天的每个组选择最大值?

    假设我有一个包含以下列的表 Name Date Number 并假设我们将以下数据插入到这些列中 Bob 2011 11 22 1 Bob 2011 11 22 5 Bob 2011 11 22 4 Bob 2011 11 22 3 Wen
  • 自动更新的 iOS 应用程序,用于企业分发

    是否有可能制作一个iOS应用企业分布透明地自我更新 说 更新 我的意思是完全更新其逻辑 这种方法的一个可能用途是远程维护的自助服务亭 iPad 不可能直接更新应用程序二进制文件 但我看到了一些可能性 具有单个 UIWebView 且逻辑在
  • 如何像 Facebook 上那样在 div 外部制作可滚动的 DIV 并带有滚动条?

    我想要一个可滚动的 div 但默认情况下滚动条应该位于浏览器的右侧 但不在 div 的右侧 我在 facebook 上看到过 ceter div contentArea 由右侧浏览器滚动条滚动 Facebook 的做法是让所有不滚动的内容都
  • Rails 单表继承 - 显式设置类型的最佳方法是什么?

    我在用单表继承在我的 Rails 应用程序中 并且想要显式设置实例的类型 我有以下内容 class Event lt ActiveRecord Base class SpecialEvent lt Event 它是通过单表继承来实现的 Sp
  • 我可以使用二进制在汇编中写入整数常量吗?

    我有一个作业要求定义 4 个整数 每个整数都有不同的字节长度 1 2 4 8 这段代码可以工作吗 segment data one db 1 two dw 01 four dd 1011 eight dq 01101110 global s
  • 我可以检测用户何时使用后退按钮进入页面吗?

    Edit 我真正需要知道的是 当用户通过后退按钮到达页面时 是否有任何 javascript 事件能够可靠地触发 我尝试过onload活动为body元素 但它不会在 Firefox 或 Safari 上触发 我正在使用一些旧代码 这些代码试
  • MongoDB E11000重复键错误

    我有一个模型在第一次发布后不断出错 我正在创建一个调度应用程序 该应用程序有 X 天 包含房间和房间的时间段 我遇到的问题是在数据库中创建日期对象 为了便于阅读 我只需要一个键值对 day model js var mongoose req
  • 现代 C++ 方法重复代码设定次数

    很简单 是否有一种更简单的方法来重复一个块一定次数 其中块内部不需要计数器变量 简单的解决方案当然是 for int i 0 i lt repetitions i do your thing i is not used here 然而 既然