gpt4 book ai didi

c++ - boost range可以变换范围内的相邻元素吗?

转载 作者:行者123 更新时间:2023-11-30 02:20:05 25 4
gpt4 key购买 nike

如果我有一个范围并且我想转换相邻对是否有 boost 范围适配器来做到这一点?

例如

std::vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);

auto b = a
| boost::range::transformed([](int x, int y){return x+y;});

输出为

3, 5

编辑

我尝试过范围适配器

    // Base class for holders
template< class T >
struct holder
{
T val;
holder( T t ) : val(t)
{ }
};


// Transform Adjacent

template <typename BinaryFunction> struct transformed_adjacent_holder
: holder
{
transformed_adjacent_holder(BinaryFunction fn) : holder<BinaryFunction>(fn)
};

template <typename BinaryFunction> transform_adjacent
(BinaryFunction fn)
{ return transformed_adjacent_holder<BinaryFunction>(fn); }

template< class InputRng, typename BinFunc>
inline auto Foo(const InputRng& r, const transformed_adjacent_holder<BinFunc> & f)
-> boost::any_range
< std::result_of(BinFunc)
, boost::forward_traversal_tag
, int
, std::ptrdiff_t
>

{
typedef boost::range_value<InputRng>::type T;
T previous;
auto unary = [&](T const & t) {auto tmp = f.val(previous, t); previous = t; return tmp; };
return r | transformed(unary);
}

但是我不知道如何推断| 运算符的返回类型。如果我能做到这一点,那么适配器就差不多解决了。

最佳答案

你可以维护一个虚拟变量

 int prev=0;
auto b = a | transformed([&prev](int x){int what = x+prev;prev=x;return what;});

关于c++ - boost range可以变换范围内的相邻元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50150762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com