C++ - 精确时间的向量

C++ - Vector of precise time

本文关键字:向量 时间 C++      更新时间:2023-10-16

我一直在寻找一个精度很高的C++时钟,我找到了这个答案,谁使用标准的时间库。然后,我尝试将所有持续时间放在一个向量中。我有一些问题。下面是一个简单的测试代码:

#include <iostream>
#include <vector>
#include <chrono>
#include <stdlib.h>
int main() {
  int i, j;
  std::chrono::high_resolution_clock::time_point begin;
  std::chrono::high_resolution_clock::time_point end;
//  std::chrono::duration<long int, std::micro> duration;
  std::vector<std::chrono::duration<long int, std::micro> > times;
  for (i=0 ; i<10 ; ++i) {
    begin=std::chrono::high_resolution_clock::now();
    for (j=0 ; j<1000000 ; ++j) {
      // Do things
    }
    end=std::chrono::high_resolution_clock::now();
    auto duration=std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count();
    times.push_back(duration);
  }

  return EXIT_SUCCESS;
}


当我编译时,我收到此错误。GCC 将向量视为long int向量,我不明白为什么。

test.cpp:28:29: erreur: no matching function for call to ‘std::vector<std::chrono::duration<long int, std::ratio<1l, 1000000l> > >::push_back(long int&)’
     times.push_back(duration);


我还尝试在第一个循环之前声明变量duration,例如 cpp 引用示例(并且没有 auto(。但是,当我尝试为其分配一个值时,出现此错误:

test.cpp:26:13: erreur: no match for ‘operator=’ (operand types are ‘std::chrono::duration<long int, std::ratio<1l, 1000000l> >’ and ‘std::chrono::duration<long int, std::ratio<1l, 1000000l> >::rep {aka long int}’)
     duration=std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count();



我的问题:

  • 我必须如何声明变量duration(不带auto(?
  • 我如何声明times向量?

你快到了,只需删除你初始化duration行末尾的.count()

  • 如何声明可变持续时间(没有自动(?
  • 我必须如何声明时间向量?

最易读的形式是类型别名,例如

using Duration = std::chrono::microseconds;
std::vector<Duration> times;
const Duration d = std::chrono::duration_cast<Duration>(end - begin);
times.push_back(d);

请注意,我已经删除了显式表示模板参数long int<chrono>提供的默认帮助程序类型(此处为 std::chrono::microseconds(很好。