Это header-only (~405 KB) C++20 библиотека в духе C++20 Ranges, Python IterTools, итераторов Rust и других, и предоставляет набор функций, в целом эквивалентный C++20 Ranges, но использует немного другую модель итерации, основанную на курсорах, а не итераторах.
Курсоры Flux - это обобщение индексов массивов, в то время как итераторы STL - обобщение указателей массивов.
Возможности:
- большой выбор алгоритмов и адаптеров последовательностей для создания мощных (?) и эффективных конвейеров данных;
- более высокая безопасность по сравнению со стандартными итераторами;
- более простое использование в распространённых случаях, особенно при определении собственных последовательностей и адаптеров;
- более эффективное выполнение некоторых распространённых операций;
- совместимость с существующими стандартными библиотечными типами и концептами.
Документация: https://tristanbrindle.com/flux/index.html
Код: https://github.com/tcbrindle/flux
Лицензия: Boost 1.0.
Пример:
constexpr auto result = flux::ints() // 0,1,2,3,...
.filter(flux::pred::even) // 0,2,4,6,...
.map([](int i) { return i * 2; }) // 0,4,8,12,...
.take(3) // 0,4,8
.sum(); // 12
static_assert(result == 12);
Он же в Compiler Explorer: https://flux.godbolt.org/z/KKcEbYnTx.
Проект от автора библиотеки NanoRange – C++20 Ranges для C++17.