我需要在一些迭代中测量我的应用程序的某些时间(毫秒)。为此,我想使用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;
答案 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;
}