首页 > 解决方案 > 对相邻元素进行操作的标准算法

问题描述

std::adjacent_find查找满足给定谓词的前两个连续元素。我正在寻找其他也有一个谓词的算法,该谓词采用(以前的,当前的)对。这对于渲染多边形、基于样本数据计算数值正交等很有用。

除了std::adjacent_find,std::adjacent_difference可用于实现一维过滤器,但如果您只想要 op(previous, current) 的总和则无用。

可以用 std::ranges 的某种视图模拟这些函数吗?

标签: c++stl-algorithmstd-ranges

解决方案


对此没有特殊功能,因为您只需调用二进制转换即可std::transform(c.begin(), std::prev(c.end()), std::next(c.begin()), op)。这适用于重叠范围[c.begin(), c.end()-1][c.begin()+1, c.end()]

类似地,其他需要两个输入范围的操作可以在两个重叠范围上工作,只要它们不修改输入即可。

这也适用于比 +/-1 更大的差异。应该注意的是,这不适用于输入迭代器——它们是一次性的。


推荐阅读