C++计算程序运行时间

引言

有时候我们需要简单计算下程序的运行时间,但又不想借助工具,而是简单的几行代码来粗略计算下时间,话不多说我们直接开始吧。

chrono库使用

C++11中可以通过该库来实现,示例代码如下:

#include <iostream>
#include <chrono>void func() {int arr[1000][100];for (int j = 0; j < 100; ++j) {for (int i = 0; i < 1000; ++i) {arr[i][j] = 1;}}
}int main() {auto beforeTime = std::chrono::steady_clock::now();func();auto afterTime = std::chrono::steady_clock::now();double duration_millsecond = std::chrono::duration<double, std::milli>(afterTime - beforeTime).count();std::cout << "total cost " << duration_millsecond << "ms" << std::endl;
}

执行结果如下:

total cost 0.460439ms

如果我们多处地方都要计算执行时间,那就要重复去写好几遍这段代码,不太方便。所以可以简单封装下:

#include <iostream>
#include <chrono>template<class T>
inline void costTime(void(*f)(), const std::string& info, const std::string& unit)
{auto beforeTime = std::chrono::steady_clock::now();f(); auto afterTime = std::chrono::steady_clock::now();double duration_millsecond = T(afterTime - beforeTime).count();std::cout << info << " total cost " << duration_millsecond << unit << std::endl;
}// 计算秒数
inline void costTimeBySec(void(*f)(), const std::string& info)
{costTime<std::chrono::duration<double>>(f, info, "s");
}
// 计算毫秒数
inline void costTimeByMs(void(*f)(), const std::string& info)
{costTime<std::chrono::duration<double, std::milli>>(f, info, "ms");
}
// 计算微秒数
inline void costTimeByUs(void(*f)(), const std::string& info)
{costTime<std::chrono::duration<double, std::micro>>(f, info, "us");
}
// 计算纳秒数
inline void costTimeByNs(void(*f)(), const std::string& info)
{costTime<std::chrono::duration<double, std::nano>>(f, info, "ns");
}
// 以上接口也可以封装到头文件,下次使用直接包含即可。// 以下函数实现就都不写了
void func(); 
void func2(int n);
int func3(int n, int m); int main() {costTimeBySec(func, "func");costTimeByMs([](){ func2(1); }, "func2(1)"); // 传入lambda表达式costTimeByUs([](){ func3(1, 2); }, "func3(1, 2)"); // 传入lambda表达式
}

控制时间粒度的模板参数如下:

模板参数级别
std::milli毫秒
std::micro微秒
std::nano纳秒

duration的第二个模板参数不写时,即为秒级别时间。

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

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

相关文章

C/C++内存泄漏及检测

“该死系统存在内存泄漏问题”&#xff0c;项目中由于各方面因素&#xff0c;总是有人抱怨存在内存泄漏&#xff0c;系统长时间运行之后&#xff0c;可用内存越来越少&#xff0c;甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一&#xff0c;因为除非用完内存或调用…

【JAVA基础篇教学】第十篇:Java中Map详解说明

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十篇&#xff1a;Java中Map详解说明。 在 Java 编程中&#xff0c;Map 接口代表了一种键值对的集合&#xff0c;每个键对应一个值。Map 接口提供了一系列操作方法&#xff0c;可以方便地对键值对进行增删改查等操作。本…

好题推荐 CF1265E Beautiful Mirrors

题目传送门-洛谷 题目传送门-CF Part.1 题意 有 n n n 面镜子&#xff0c;第 i i i 个镜子有 p i 100 \frac{p_{i}}{100} 100pi​​ 的概率说 “你真好看”。一个人从第一个镜子开始&#xff0c;到第 n n n 个镜子说 “你真好看” 为止的天数期望&#xff0c;方式如下&am…

C++菜单查询

定义一个菜品类&#xff0c;包含菜名和菜价两个私有数据成员&#xff0c;设置菜名菜价&#xff0c;输出菜名菜价&#xff0c;获取菜价等共有成员函数。main函数中读入n个菜品的菜名和价格&#xff0c;然后输出菜价低于mprice的所有菜品信息(按输入顺序输出)&#xff0c;以及低于…

JavaScript:Object对象的属性方法

Object.defineProperty()方法: Object.defineProperty()方法---为对象添加属性---Vue的源码中经常用到 // 1 Object.defineProperty()方法---为对象添加属性---Vue的源码中经常用到const person {firstName: 呼呼,lastName: 憨憨}// // 为某个对象添加一个属性,并对该属性进…

模板方法模式:定义算法骨架的设计策略

在软件开发中&#xff0c;模板方法模式是一种行为型设计模式&#xff0c;它在父类中定义一个操作的算法框架&#xff0c;允许子类在不改变算法结构的情况下重定义算法的某些步骤。这种模式是基于继承的基本原则&#xff0c;通过抽象类达到代码复用的目的。本文将详细介绍模板方…

NASA数据集——亚洲夏季季风化学与气候影响项目超高灵敏度气溶胶光谱(UHSAS)数据

ACCLIP_Aerosol_AircraftInSitu_WB57_Data 简介 ACCLIP_Aerosol_AircraftInSitu_WB57_Data 是亚洲夏季季风化学与气候影响项目&#xff08;ACCLIP&#xff09;期间收集的原地气溶胶数据。本数据集收录了来自下一代激光质谱仪&#xff08;PALMS-NG&#xff09;、单颗粒烟尘光度…

一文读懂Partisia Blockchain,被严重低估的隐私区块链生态

在今年 3 月&#xff0c;隐私公链 Partisia Blockchain 迎来了重要的进展&#xff0c;该生态通证 $MPC 上线了交易所&#xff0c;目前 $MPC 通证可以在 Kucoin、Gate、BitMart、Bitfinex、Bitture 等平台交易&#xff0c;并将在不久后上线 MEXC 平台。 ​ 在上个月上线市场至今…

AIGC时代 可演进的私有云将蔚然成风

随着AIGC&#xff08;人工智能、大数据、云计算、物联网等技术的融合应用&#xff09;时代的来临&#xff0c;企业面临着前所未有的机遇与挑战。在这一时代背景下&#xff0c;IT基础设施如何平衡新旧资源、如何拥抱新技术应用&#xff0c;成为了企业信息化建设的核心议题。而私…

vim快捷指令

Vim是一款强大的文本编辑器&#xff0c;它提供了许多快捷指令来提高编辑效率。以下是一些常用的Vim快捷指令&#xff1a; 移动光标&#xff1a; h 向左移动一个字符j 向下移动一行k 向上移动一行l 向右移动一个字符w 跳到下一个单词的开头b 跳到前一个单词的开头e 跳到当前单词…

SpringBoot项目快速打印controller类的URL

创建一个配置类&#xff0c;实现WebMvcConfigurer接口&#xff0c;并重写addInterceptors方法来注册一个自定义的RequestMappingHandlerMapping。 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configurati…

华为OD-C卷-小明找位置[100分]

题目描述 小朋友出操,按学号从小到大排成一列; 小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。 算法复杂度:不高于 nlog(n); 学号为整数类型,队列规模 ≤ 10000; 输入描述 第一行:输入已排成队列的小朋友的学号(正整数),以空格隔开;例如: 93 9…

springboot项目关闭swagger防止漏洞扫描

为了应对安全扫描&#xff0c;再生产环境下关闭swagger ui 1、项目中关闭swagger 在这里用的是config配置文件的方式关闭的 Configuration EnableSwagger2 public class SwaggerConfig implements WebMvcConfigurer {Value("${swagger.enable}")private Boolean e…

【项目实战】记录一次PG数据库迁移至GaussDB测试(上)

目录 一、说明 1.1、参考文档 1.2、注意事项 1.3、环境基本情况 二、GaussDB新环境安装 2.1 配置操作环境变量 2.1.1 关闭防火墙 步骤1 执行以下命令&#xff0c;检查防火墙是否关闭。 步骤2 执行以下命令&#xff0c;关闭防火墙并禁止开机启动。 步骤3 修改/etc/sel…

Django序列化常用字段与参数

Django序列化常用字段与参数 目录 Django序列化常用字段与参数序列化常见字段序列化常见参数 序列化常见字段 字段含义字段构造方式BooleanField布尔值判断(True/False)BooleanField()NullBooleanField布尔值判断(可以为Null)NullBooleanField()CharField文本字符串CharField(…

MySQL 中datatime 与 timestamp区别

在 MySQL 中&#xff0c;DATETIME 和 TIMESTAMP 是两种用于存储日期和时间的数据类型&#xff0c;它们有以下区别&#xff1a; 存储范围&#xff1a; DATETIME&#xff1a;存储的日期和时间范围从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。TIMESTAMP&#xff1a;存…

单细胞RNA测序(scRNA-seq)Cellranger流程入门和数据质控

单细胞RNA测序(scRNA-seq)Cellranger流程入门和数据质控 单细胞RNA测序(scRNA-seq)基础知识可查看以下文章: 单细胞RNA测序(scRNA-seq)工作流程入门 单细胞RNA测序(scRNA-seq)细胞分离与扩增 1. 单细胞RNA-seq样本数据说明 样本数据来源文章:Acquired cancer re…

【计算机毕业设计】基于微信小程序的开发项目150套(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享200的微信小程序毕业设计&#xff0c;后台用Java开发&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业设…

1.点亮第一个LED

#include "reg52.h" sbit LED1P2^0; //将P2.0管脚定义为LED1void main() { LED10; //LED1端口设置为低电平 while(1) { } } 接线说明 为了使LED灯能够正常工作&#xff0c;需要将其正确地连接到单片机的某个输出端口。在这…

【运维笔记】负载均衡的原理与算法——以Nginx为例

一、负载均衡的定义及其重要性 负载均衡是一种广泛应用于数据中心和云计算环境的技术&#xff0c;它能够将工作负载均匀地分配到服务器集群中的多个服务器上。这一技术的核心目的是优化资源利用率&#xff0c;提高服务可靠性&#xff0c;降低响应时间&#xff0c;从而保障网络…