📅  最后修改于: 2023-12-03 15:29:52.879000             🧑  作者: Mango
在实际编程中,我们常常需要比较不同算法或程序的效率,这时就需要使用计时器来比较不同程序的运行时间。C++ 中提供了多种计时方式,本文将介绍三种常用的计时方式:std::chrono
,clock()
和time()
。
std::chrono
是C++11标准提供的时间库,提供了高级别的时间表示清晰并且易于使用。使用 std::chrono
计时需要以下步骤:
#include <chrono>
// ...
auto start = std::chrono::high_resolution_clock::now();
// ... 执行需要计时的代码
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration_cast<std::chrono::nanoseconds>
计算时间差并输出:auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count();
std::cout << "程序运行时间:" << duration << " 纳秒" << std::endl;
以下是一个基于 std::chrono
计时的完整示例:
#include <iostream>
#include <chrono>
void func()
{
int sum = 0;
for (int i = 0; i < 1000000; i++)
{
sum += i;
}
}
int main()
{
auto start = std::chrono::high_resolution_clock::now();
func();
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count();
std::cout << "程序运行时间:" << duration << " 纳秒" << std::endl;
return 0;
}
clock()
函数可以计算函数的 CPU 时间,但是不精确。使用 clock()
计时需要以下步骤:
clock()
函数计算起始 CPU 时间:#include <ctime>
// ...
clock_t start = clock();
clock()
函数计算结束 CPU 时间,并计算时间差:clock_t end = clock();
double duration = (double)(end - start) / CLOCKS_PER_SEC;
以下是一个基于 clock()
计时的完整示例:
#include <iostream>
#include <ctime>
void func()
{
int sum = 0;
for (int i = 0; i < 1000000; i++)
{
sum += i;
}
}
int main()
{
clock_t start = clock();
func();
clock_t end = clock();
double duration = (double)(end - start) / CLOCKS_PER_SEC;
std::cout << "程序运行时间:" << duration * 1000 << " 毫秒" << std::endl;
return 0;
}
time()
函数可以获取当前时间,但也不精确。使用 time()
计时需要以下步骤:
time()
函数计算起始时间:#include <ctime>
// ...
time_t start = time(NULL);
time()
函数计算结束时间,并计算时间差:time_t end = time(NULL);
double duration = difftime(end, start);
以下是一个基于 time()
计时的完整示例:
#include <iostream>
#include <ctime>
void func()
{
int sum = 0;
for (int i = 0; i < 1000000; i++)
{
sum += i;
}
}
int main()
{
time_t start = time(NULL);
func();
time_t end = time(NULL);
double duration = difftime(end, start);
std::cout << "程序运行时间:" << duration << " 秒" << std::endl;
return 0;
}
注:使用 std::chrono
更为精确,并且可以获取纳秒级别的时间差。建议优先使用 std::chrono
计时。