使用 Range-v3 在适当的 monad/applicative 中“包装”对象的正确方法是什么?

问题描述

假设给定这样的范围

std::vector<int> v{1,4,7,2};

我想生成一个范围,其中所有偶数都重复等于其值的次数,而所有奇数都保持不变。

可能的解决方案如下:

#include <iostream>
#include <range/v3/view/join.hpp>
#include <range/v3/view/transform.hpp>
#include <range/v3/view/repeat_n.hpp>
#include <vector>

using namespace ranges::views;

auto f = [](auto x){
    return (x % 2) ? repeat_n(x,1) : repeat_n(x,x);
};

int main() {
    std::vector<int> v{1,2};
    auto w = v | transform(f) | join;
    for (auto i : w)
        std::cout << i << std::endl;
}

但是,使用 repeat_n(x,1) 只是为了将 x 包装在单例范围内对我来说看起来有点笨拙。 Range-v3 中是否有一些专门的功能可以做到这一点?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...