将函数作为参数传递,而无需知道该函数的参数数量

时间:2019-05-11 12:13:31

标签: c++ algorithm

我需要测量一些排序算法的时间。问题在于某些函数(算法)可能具有2个参数(例如气泡排序)或3个参数(快速排序)。我不知道如何准备我的函数以接受两种类型的函数(2个参数和3个参数)。

我正在考虑向每个只有2个参数的函数添加一些默认参数,然后在我的get_time_calculations中声明如下:

double get_time_calculations(void (*f)(int *, int, int), int *tab, int n) {
    ...
}

但是这种解决方案只是解决方法,也许有一种更好的方法可以做到这一点,而无需更改准备好的算法的论点?

我用来衡量函数执行时间的函数:

double get_time_calculations(void (*f)(int *, int), int *tab, int n) {
    clock_t begin, end;
    begin = clock();
    f(tab, n);
    end = clock();
    randomize(tab, n, -100, 201);
    return (double)(end - begin)/CLOCKS_PER_SEC;
}

还有我测试所有算法的功能:

void test1(int *ran_tab, int n) {

    cout << endl << "Insert sort: " << get_time_calculations(insert_sort, ran_tab, n) << "ms" << endl;
    cout << endl << "Bubble sort: " << get_time_calculations(bubble_sort, ran_tab, n) << "ms" << endl;
    cout << endl << "Selection sort: " << get_time_calculations(selection_sort, ran_tab, n) << "ms" << endl;
    cout << endl << "Quick sort: " << get_time_calculations(quick_sort, ran_tab, n) << "ms" << endl;
    cout << endl << "Shell sort: " << get_time_calculations(shell_sort, ran_tab, n) << "ms" << endl;
    cout<<endl<<"Heap sort: "<<get_time_calculations(heap_sort, ran_tab, n)<<"ms"<<endl;
}

0 个答案:

没有答案