#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. Преимущество аргумента булевского типа в том, что есть возможность передать любой предикат. Ну, и конечно, без проверки нельзя тут обойтись, потому что(по хорошему) в функции нужно провести проверку очереди на пустоту
Комментариев нет:
Отправить комментарий