C ++ Boost Range Adapter Несколько векторов

Я только недавно начал использовать адаптер диапазона в boost, когда мне пришлось выполнять преобразование / функцию над вектором. Ниже приведен фрагмент одного из самых простых примеров, с которыми я столкнулся, когда начинал использовать адаптер диапазона.

int multiplyByTwo(int n) { return n*2; }
std::vector<int> num = {1, 2, 3, 4, 5};
auto result = num | boost::adaptors::transformed(multiplyByTwo);

Что если моей функции требуется два аргумента вместо одного, есть ли способ передать два вектора в адаптер диапазона? Например, в этой ситуации:

int multiplyBoth(int n1, int n2) {return n1*n2; }
std::vector<int> num1 = {1, 2, 3, 4, 5};
std::vector<int> num2 = {1, 2, 3, 4, 5};

Смогу ли я все еще передать оба вектора num1 а также num2 в мою функцию через адаптер диапазона? Возможно, что-то вроде этого:

auto result = num1 | num2 | boost::adaptors::transformed(multiplyBoth);

1

Решение

Ты можешь использовать combine превратить несколько диапазонов в диапазон кортежей.

Вы должны адаптировать свою функцию так, чтобы она могла обрабатывать кортеж, но лямбда может это сделать.

1

Другие решения

Других решений пока нет …