6.3.4  序列相邻差算法adjacent_difference()

6.3.4 序列相邻差算法 adjacent_ difference()

adjacent_difference()算法用于计算序列的相邻差,即计算由迭代器指定的源区间[_First,_Last]内相邻元素的差值,并将结果赋至以_Result为起始的序列中。序列相邻差的计算步骤为:首先,把源序列的第一个元素赋值给新序列的第一个元素;其次,把源序列的第2个元素减去第1个元素,并将其结果赋值给新序列的第2个元素;再次,把源序列的第3个元素减去第2个元素,并将结果赋值给新序列的第3个元素;以此类推,直至计算完源序列的全部元素为止。同样,adjacent_difference()算法也提供了带有谓词的形式。

adjacent_difference()算法的原型为:

978-7-111-51399-5-Chapter06-94.jpg

其中,第一种形式用于计算源区间[_First,_Last]中元素的相邻差,并将计算结果保存至以_Result为起始的新序列中;第二种形式用于针对源区间[_First,_Last]中的每个元素和其紧邻的前一个元素调用谓词处理,并将计算结果写入以_Result为起始的目标序列中。源序列的第一个元素只是被单纯地复制。

需要注意的问题如下:

1)该算法的返回值为目标区间内“最后一个被写入的值”的下一位置。

2)该算法的第一种形式相当于将一个绝对值序列转换为一个相对值序列。

3)源区间和目标区间可以相同。

4)程序员需要确保目标区间足够大,否则需要使用插入型迭代器。

5)谓词函数_Binary_op不能修改传入其内的参数。

由内容可知,对于序列a,b,c,d,...,使用adjacent_difference()算法将产生新序列:a,b-a,c-b,d-c,...。

提示

partial_sum()算法和adjacent_difference()算法的效果是完全相对的,两种算法之间是逆向操作的关系。

例6-13

978-7-111-51399-5-Chapter06-95.jpg

978-7-111-51399-5-Chapter06-96.jpg

例6-13的执行效果如图6-13所示。

978-7-111-51399-5-Chapter06-97.jpg

图6-13 例6-13的执行效果

总结

请读者认真阅读例题,对照前面讲述的内容,体会adjacent-difference()算法的执行效果。