Предположим, у меня есть два std :: vectors x и y и двоичная функция F. Я хотел бы создать новый объект z (не обязательно вектор) со свойством, что i-й элемент z будет приложением F к i-е элементы х и у. Пока пользуюсь
boost::range::transform(x, y, z.begin(), F)
что, конечно, требует выделения памяти для z. Моя цель, однако, состоит в том, чтобы избежать такого выделения памяти и оценить ленивое преобразование, аналогично тому, что boost :: adapters :: transformed делает с унарными функциями. Другими словами, тип z будет некоторым типом boost :: range. Есть ли простой способ сделать это, или я должен был бы написать свой собственный класс диапазона? Заранее спасибо!
Проблема в том, что Boost.Range не обеспечивает zip_range
это может застегнуть x
а также y
как вход для вашего transform
, Так что вам нужно написать один, например, с помощью make_iterator_range
а также zip_iterator
(из библиотеки Boost.Iterator). Смотрите, например этот ответ для примера кода.
Других решений пока нет …