Я только недавно начал использовать адаптер диапазона в 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);
Ты можешь использовать combine
превратить несколько диапазонов в диапазон кортежей.
Вы должны адаптировать свою функцию так, чтобы она могла обрабатывать кортеж, но лямбда может это сделать.
Других решений пока нет …