Vector of std::chrono::milliseconds

Vector of std::chrono::milliseconds

本文关键字:chrono milliseconds std of Vector      更新时间:2023-10-16

我需要在一些迭代中测量应用程序的一些时间(毫秒)。为此,我想使用std::chrono-Library。现在我想创建一个毫秒的向量,这样我就可以把所有测量到的时间存储在这个向量里。之后,我想对向量进行排序以获得中位数。

但我目前无法创建一个向量。我不知道应该用哪种类型来创建它。有人知道这是怎么回事吗?我的问题找不到答案。

这是我到目前为止所尝试的:

vector<chrono::milliseconds> times;
for(int z = 0; z < 10; z++){
        auto start = chrono::high_resolution_clock::now();
        //... the application to measure
        auto end = chrono::high_resolution_clock::now();
        auto elapsedtime = chrono::duration_cast<chrono::milliseconds>(end - start).count();
        times.push_back(elapsedtime);
}
std::sort(times.begin(), times.end());
std::cout << "Median: " << times.at(times.size()/2) << "(ms)" << endl;

您的矢量类型对于存储std::chrono::duration是正确的。创建vector时不应出现错误

然而,有一个错误,当你试图在这里填充向量:

auto elapsedtime = chrono::duration_cast<chrono::milliseconds>(end - start).count();
times.push_back(elapsedtime);

将运行时间设置为std::duration::count返回的值,该值返回持续时间的内部tickcount。它的类型是std::duration::rep。只要去掉计数就可以了

您的问题是elapsedtime不是chrono::milliseconds,而是chrono::milliseconds::rep。你可以这样做:

#include <iostream>
#include <vector>
#include <algorithm>
#include <chrono>
int main() {
  using namespace std;
  vector<chrono::milliseconds> times;
  for(int z = 0; z < 10; z++) {
    auto start = chrono::high_resolution_clock::now();
    //... the application to measure
    auto end = chrono::high_resolution_clock::now();
    auto elapsedtime = chrono::duration_cast<chrono::milliseconds>(end - start).count();
    times.push_back(chrono::milliseconds(elapsedtime));
  }
  std::sort(times.begin(), times.end());
  std::cout << "Median: " << times.at(times.size()/2).count() << "(ms)" << endl;
}

或:

#include <iostream>
#include <vector>
#include <algorithm>
#include <chrono>
int main() {
  using namespace std;
  vector<chrono::milliseconds::rep> times;
  for(int z = 0; z < 10; z++) {
    auto start = chrono::high_resolution_clock::now();
    //... the application to measure
    auto end = chrono::high_resolution_clock::now();
    auto elapsedtime = chrono::duration_cast<chrono::milliseconds>(end - start).count();
    times.push_back(elapsedtime);
  }
  std::sort(times.begin(), times.end());
  std::cout << "Median: " << times.at(times.size()/2) << "(ms)" << endl;
}

或者

#include <iostream>
#include <vector>
#include <algorithm>
#include <chrono>
int main() {
  using namespace std;
  vector<chrono::milliseconds> times;
  for(int z = 0; z < 10; z++) {
    auto start = chrono::high_resolution_clock::now();
    //... the application to measure
    auto end = chrono::high_resolution_clock::now();
    auto elapsedtime = chrono::duration_cast<chrono::milliseconds>(end - start);
    times.push_back(elapsedtime);
  }
  std::sort(times.begin(), times.end());
  std::cout << "Median: " << times.at(times.size()/2).count() << "(ms)" << endl;
}
(live at coliru)