С помощью комбинатора ленивых диапазонов, такого как ranges::view::reverse
, я могу предоставить ему один аргумент (например, reverse(iota(0,3))
);или я могу использовать его для настройки диапазона, используя operator|
(например, iota(0,3) | reverse
).Это соотношение кажется довольно регулярным;ниже приведены примеры нулевого, унарного и двоичного представлений:
#include <range/v3/all.hpp>
#include <iostream>
int main(int argc, char *argv[])
{
using namespace ranges::view;
std::cout << (iota(0,9) | reverse) << ' ';
std::cout << reverse(iota(0,9)) << '\n';
std::cout << (iota(0,9) | chunk(4)) << ' ';
std::cout << chunk(iota(0,9),4) << '\n';
std::cout << (iota(0,9) | replace(5,0)) << ' ';
std::cout << replace(iota(0,9),5,0) << '\n';
return 0;
}
Я заметил, что комбинатор ranges::view::zip_with
можно использовать только во второй (неадаптивной) форме;такие как zip_with(std::plus{},iota(0,9),iota(0,9))
.Есть ли техническая причина, по которой zip_with
нельзя определить для работы с operator|
?Есть ли канонический порядок аргументов комбинаторов ленивых диапазонов в библиотеке range-v3?
Я работаю с последней версией (v0.4.0) библиотеки range-v3.