如何在C ++中为类似操作重用函数

时间:2019-01-15 02:17:44

标签: c++ function

对于我的大学,我们有一个分配atm,它将一个.txt文件解析为一个州和县的2个结构。之后,我们有几种不同的需求需要进一步评估数据,例如按家庭收入中位数对州/县进行排序。不幸的是,我需要能够对一个州阵列和一个县阵列执行每个操作。是否有一种有效的方法可以重用我使用状态的函数并将其用于县,还是我必须重载函数并编写更多不需要的代码。这是用于状态的示例函数。

/*********************************************************************
** Function: print_lowest_2015
** Description: prints lowst unenmployment in 2015 from state
** Parameters: states and num
** Pre-Conditions: n/a
** Post-Conditions: n/a
*********************************************************************/
void print_lowest_2015(state* arr, int num) {
    int ue;
    string name;
    ue= arr[0].unemployed_2015;
    for (int i = 0; i < num; i++) {
        if (arr[i].unemployed_2015 < ue) {
            ue = arr[i].unemployed_2015;
            name = arr[i].name;
        }
    }
    cout << "State with the lowest 2015 unemployment rate is " << name << " with a value of " << ue << endl;
}

/*********************************************************************
    ** Function: print_lowest_2015
    ** Description: prints lowst unenmployment in 2015 from counties
    ** Parameters: counties and num
    ** Pre-Conditions: n/a
    ** Post-Conditions: n/a
    *********************************************************************/
    void print_lowest_2015(county* arr, int num) {
        int ue;
        string name;
        ue = arr[0].unemployed_2015;
        for (int i = 0; i < num; i++) {
            if (arr[i].unemployed_2015 < ue) {
                ue = arr[i].unemployed_2015;
                name = arr[i].name;
            }
        }
        cout << "County with the lowest 2015 unemployment rate is " << name << " with a value of " << ue << endl;
    }

1 个答案:

答案 0 :(得分:0)

  

void print_lowest_2015(state * arr,int num){

对数组使用原始指针不是很好的c ++。因此,不要费心改进它。这样的代码是在1998年之前编写的。在2019年学习这样的代码非常危险且无用。

如果由于某种原因您无法更改调用代码,则可以通过以下方式重复使用该函数。

template<class Div>
void print_lowest_2015(Div* arr, int num) {
    auto min_div = std::min_element(arr, arr+num, [](Div& s1, Div& s2){
        return s1.unemployed_2015 < s2.unemployed_2015;
    });
    cout << "State with the lowest 2015 unemployment rate is " << min_div->name << " with a value of " << min_div->unemployed_2015 << '\n';
}

链接:https://gcc.godbolt.org/z/70oMxs