📜  c++ 比较时间 - C++ (1)

📅  最后修改于: 2023-12-03 15:29:52.879000             🧑  作者: Mango

C++ 比较时间

在实际编程中,我们常常需要比较不同算法或程序的效率,这时就需要使用计时器来比较不同程序的运行时间。C++ 中提供了多种计时方式,本文将介绍三种常用的计时方式:std::chronoclock()time()

std::chrono

std::chrono是C++11标准提供的时间库,提供了高级别的时间表示清晰并且易于使用。使用 std::chrono 计时需要以下步骤:

  1. 定义起始时间和结束时间:
#include <chrono>
// ...
auto start = std::chrono::high_resolution_clock::now();
// ... 执行需要计时的代码
auto end = std::chrono::high_resolution_clock::now();
  1. 通过调用 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()

clock()函数可以计算函数的 CPU 时间,但是不精确。使用 clock() 计时需要以下步骤:

  1. 使用 clock() 函数计算起始 CPU 时间:
#include <ctime>
// ...
clock_t start = clock();
  1. 在需要计时的代码执行完毕后,使用 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() 计时需要以下步骤:

  1. 使用 time() 函数计算起始时间:
#include <ctime>
// ...
time_t start = time(NULL);
  1. 在需要计时的代码执行完毕后,使用 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 计时。