我正在尝试复制向量V。
我需要在模板中复制一个副本(作为注释放置),因为我正在测试此标记中排序的运行时间。
为了确保对排序运行时间进行了正确的测试,我需要进行复制,因为排序后的向量的运行时间与未排序的向量不同。
template <typename TFunc> void RunAndMeasure(const char* title, const int repeat, TFunc func)
{
for(int i = 0; i < repeat; ++i) {
//makecopyhere
const auto start = chrono::steady_clock::now();
func();
const auto end = chrono::steady_clock::now();
cout << title << ": " << chrono::duration <double, std::milli>(end - start).count() << " ms" << "\n";
}
cout<<"\n"<<endl;
}
int main()
{
long int samples=5000000;
constexpr int repeat{10};
random_device rd;
mt19937_64 mre(rd());
uniform_int_distribution<int> urd(1, 10);
vector<int> v(samples);
for(auto &e : v) {
e = urd(mre);
}
RunAndMeasure("std::warm up", repeat, [&v] {
vector <int> path= v;
sort(execution::par, path.begin(), path.end());
});
return 0;
}
对不起,我的英语不好
谢谢
答案 0 :(得分:0)
我想删除功能(矢量路径)中创建的副本,并在模板中创建副本,只是为了确保排序操作时间。
所以,类似
template <typename TFunc, typename TArg> void RunAndMeasure(const char* title, const int repeat, TFunc func, TArg arg)
{
for(int i = 0; i < repeat; ++i) {
TArg copy = arg;
const auto start = chrono::steady_clock::now();
func(copy);
const auto end = chrono::steady_clock::now();
cout << title << ": " << chrono::duration <double, std::milli>(end - start).count() << " ms" << "\n";
}
cout<<"\n"<<endl;
}
int main()
{
long int samples=5000000;
constexpr int repeat{10};
random_device rd;
mt19937_64 mre(rd());
uniform_int_distribution<int> urd(1, 10);
vector<int> v(samples);
for(auto &e : v) {
e = urd(mre);
}
RunAndMeasure("std::warm up", repeat, [](vector<int> & path) {
sort(execution::par, path.begin(), path.end());
}, v);
return 0;
}