Как я могу повторно использовать функции для подобных операций в C ++ - PullRequest
0 голосов
/ 15 января 2019

Для моего университета у нас есть 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 голосов
/ 15 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...