std::adjacent_find
查找满足给定 predicate 的前两个连续元素。我正在寻找其他算法,这些算法也有一个 predicate ,接受(前一个,当前)对。这对于渲染多边形,基于样本数据计算数值求积等很有用。
除了std::adjacent_find
之外,还有std::adjacent_difference
,它可以用来实现一维过滤器,但如果你只想要op(previous,current)的总和,它就没有用了。
这样的函数可以用std::ranges中的某种视图来模拟吗?
2条答案
按热度按时间xt0899hw1#
这里没有特殊的函数,因为你可以直接调用二进制转换
std::transform(c.begin(), std::prev(c.end()), std::next(c.begin()), op)
,它适用于重叠的范围[c.begin(), c.end()-1]
和[c.begin()+1, c.end()]
。类似地,采用两个输入范围的其他操作可以在两个重叠的范围上工作,只要它们不修改输入。
这也适用于大于+/-1的差异。应该注意的是,这对输入迭代器不起作用-它们是一次通过的。
ux6nzvsh2#
从C++23开始,有
std::views::adjacent<N>
,它根据N-tuple
s的视图重新解释给定的范围。这是一个强大的工具,具有 * 结构化绑定 *,允许您使用命名的类字段遍历范围。例如,如果N==2,字符串
显然,也提供了相应的
std::views::adjacent_transform<N>
视图,它将返回将给定的N-nary函数应用于每个N-tuple的结果视图:型