Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Работа с парами в методах C++

#cpp


Есть метод, работающий с очередью пар deque. Нужно, чтобы при определенных входных
данных, метод, работал либо с первой частью пары, либо со второй. Пример:

void max3(deque> & q, [first or second] ) {
    int a = q[0].[first or second];
    cout << a << endl;
}

    


Ответы

Ответ 1



Я бы написал так: void max3(deque> &q, bool use_second) { int a = (use_second ? q[0].second : q[0].first); cout << a << endl; } можно ли это реализовать через прямое указание в аргументах, либо first, либо second, без лишних методов и условий? Тогда можно использовать указатель-на-член-класса (pointer-to-member): void max3(deque> &q, int pair::* member) { int a = q[0].*member; cout << a << endl; } Пример использования: max3(foo, &pair::first).

Ответ 2



Конкретно для данных пар целочисленного типа, это просто: void max3(const std::deque>& q, bool x ) { std::cout << q[0].first * x + q[0].second * (!x) << std::endl; } P.S. Преимущество аргумента булевского типа в том, что есть возможность передать любой предикат. Ну, и конечно, без проверки нельзя тут обойтись, потому что(по хорошему) в функции нужно провести проверку очереди на пустоту

Комментариев нет:

Отправить комментарий