将main中的函数指针值传递给辅助函数

时间:2019-03-14 20:38:27

标签: c++ function-pointers heapsort

下面的代码堆从最小到最大对整数进行排序。

let firstDriver = f1Data.mrData.standingsTable.standingsLists[0].driverStandings
            for driver in firstDriver {
            //print(firstDriver)
                print(driver.driver.familyName)
            }

我目前正在尝试将布尔函数指针传递给辅助函数(shift_down),以便可以选择堆排序的决定方式,但是我的问题是我不知道要为调用此函数的函数传递哪些参数辅助功能。 这是我目前正在尝试使用shift_down函数

#include <iostream>
#include <vector>

using namespace std;

void shift_down(vector<int>& heap,int i, int max) {
    int i_big, c1, c2;
    while(i < max) {
        i_big = i;
        c1 = (2*i) + 1;
        c2 = c1 + 1;
        if( c1<max && heap[c1]>heap[i_big] )
            i_big = c1;
        if( c2<max && heap[c2]>heap[i_big] )
            i_big = c2;
        if(i_big == i) return;
        swap(heap[i],heap[i_big]);
        i = i_big;
    }
}

void to_heap(vector<int>& arr) {
    int i = (arr.size()/2) - 1;
    while(i >= 0) {
        shift_down(arr, i, arr.size());
        --i;
    }
}

void heap_sort(vector<int>& arr) {
    to_heap(arr);
    int end = arr.size() - 1;
    while (end > 0) {
        swap(arr[0], arr[end]);
        shift_down(arr, 0, end);
        --end;
    }
}

int main() {
    vector<int> data = {
        12, 11, 15, 10, 9, 1, 2,
        3, 13, 14, 4, 5, 6, 7, 8
    };
    heap_sort(data);
    for(int i : data) cout << i << " ";
}

例如,我可能试图在main中传递以下两个功能之一

void shift_down(vector<int>& heap, int i, int max, bool(*sbb)(int n1, int n2)) {
    int i_big, c1, c2;
    while (i < max) {
        i_big = i;
        c1 = (2 * i) + 1;
        c2 = c1 + 1;
        if (c1<max && sbb(heap[i_big], heap[c1]))// calling function pointer
            i_big = c1;
        if (c2<max && sbb(heap[i_big], heap[c2])) // calling function pointer 
            i_big = c2;
        if (i_big == i) return;
        swap(heap[i], heap[i_big]);
        i = i_big;
    }
}

我想我会这样:

bool sbb0(int n1, int n2) {
    if (n1 < n2) {
        return true;
    }
    else {
        return false;
    }
}

bool sbb1(int n1, int n2) {
    if (n1 > n2) {
        return true;
    }
    else {
        return false;
    }
}

总而言之,我的问题是我试图从上到下传递函数指针参数,但不确定如何调用调用辅助函数的函数参数。感谢所有帮助和指导。

0 个答案:

没有答案