对相邻元素进行操作的标准算法
Standard algorithm to operate on adjacent elements
std::adjacent_find
查找满足给定谓词的前两个连续元素。我正在寻找其他算法,这些算法也有一个采用(先前的,当前的)对的谓词。这对于渲染多边形、基于样本数据计算数值正交等非常有用
除了std::adjacent_find
还有std::adjacent_difference
,可以用来实现一维过滤,但是如果你只想要op(previous, current)的和就没有用了.
这些功能可以用 std::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 的差异。应该注意的是,这不适用于输入迭代器——它们是一次性的。
std::adjacent_find
查找满足给定谓词的前两个连续元素。我正在寻找其他算法,这些算法也有一个采用(先前的,当前的)对的谓词。这对于渲染多边形、基于样本数据计算数值正交等非常有用
除了std::adjacent_find
还有std::adjacent_difference
,可以用来实现一维过滤,但是如果你只想要op(previous, current)的和就没有用了.
这些功能可以用 std::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 的差异。应该注意的是,这不适用于输入迭代器——它们是一次性的。