问题描述
假设给定这样的范围
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 (将#修改为@)