有没有一种方法可以将载体复制到模板上?

时间:2019-11-11 15:21:59

标签: c++ templates vector

我正在尝试复制向量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;
}

对不起,我的英语不好

谢谢

1 个答案:

答案 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;
}