矢量std :: chrono ::毫秒

时间:2014-05-28 09:12:50

标签: c++ c++11 vector chrono

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

但iam目前无法创建矢量。我不知道我应该采用哪种类型来创建它。有人有一个想法,这可能如何工作?我找不到任何问题的答案。

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

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;

2 个答案:

答案 0 :(得分:3)

您的矢量类型适用于存储std::chrono::duration。创建矢量时应该没有错误。

但是,有一个错误,你试图在这里填充向量:

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

您将经过时间设置为std::duration::count返回的值,该值返回持续时间的内部tickcount。它的类型是std::duration::rep。只需删除计数就可以了。

答案 1 :(得分:1)

您的问题是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