问题描述
鉴于此代码,
#include <iostream>
#include <range/v3/view/join.hpp>
#include <range/v3/view/repeat.hpp>
#include <range/v3/view/take.hpp>
#include <range/v3/view/transform.hpp>
#include <utility>
namespace rv = ranges::views;
int main() {
std::vector<int> v{0,1,2,3};
std::cout <<
(v | rv::transform([](int x){ return rv::repeat(x) | rv::take(x); })
| rv::join)
<< std::endl; // outputs [1,3,3]
}
我想有一个函数可以适当地结合 join
和 transform
来完成这项工作。如果我必须自己写,我会去
auto constexpr mbind = [](auto&& r,auto&& f){
return std::forward<decltype(r)>(r)
| rv::transform(std::forward<decltype(f)>(f))
| rv::join;
};
但这不支持 operator|
,这使得使用它的可读性稍差。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)