STL数值算法有哪些实用技巧 accumulate inner_product用法示例

stl中的数值算法accumulate和inner_product功能强大且实用。accumulate不仅可求和,还可通过自定义操作符实现字符串拼接、结构体字段汇总等,例如将vector中的数字拼接成字符串。inner_product默认计算两个序列的点积,但可通过自定义操作符实现元素比较、逻辑判断等功能,如判断两个vector是否完全相同。两者均支持Lambda表达式,扩展性强,适用于多种数据计算场景,掌握其用法可显著提升编码效率。

STL数值算法有哪些实用技巧 accumulate inner_product用法示例

STL中的数值算法虽然不像排序或查找那样高频出现,但在处理数据计算时非常实用。其中

accumulate

inner_product

是两个比较常用且功能强大的函数,掌握它们的用法可以简化代码、提升效率。

STL数值算法有哪些实用技巧 accumulate inner_product用法示例

accumulate:不只是求和

accumulate

最常见的是用来求和,但其实它的能力远不止于此。它在

<numeric>

头文件中定义,基本形式如下:

STL数值算法有哪些实用技巧 accumulate inner_product用法示例

accumulate(起始迭代器, 结束迭代器, 初始值);

默认情况下它是将元素逐个加到初始值上,但你还可以传入一个二元操作符,比如乘法、拼接字符串等。

举个例子:

STL数值算法有哪些实用技巧 accumulate inner_product用法示例

假设你想把一个vector里的所有数字连起来变成字符串:

vector<int> nums = {1, 2, 3, 4}; string result = accumulate(nums.begin(), nums.end(), string(""),      [](string s, int n) { return s + to_string(n); });

这样就能得到

"1234"

,是不是比写循环方便多了?

inner_product:两个序列的“点积”变形

inner_product

默认行为是对两个序列对应元素相乘后求和,就像数学中的点积运算。它的基本调用方式如下:

inner_product(第一个范围起始, 第一个范围结束, 第二个范围起点, 初始累加值);

但它的强大之处在于可以自定义两个操作符:一个是“每对元素怎么处理”,另一个是“这些结果如何合并”。

举个例子:

你想判断两个vector是否完全相同,可以用它来做:

vector<int> a = {1, 2, 3}, b = {1, 2, 3}; int same = inner_product(a.begin(), a.end(), b.begin(), 0,     plus<>(), equal_to<>());

这里的意思是:每对元素比较是否相等(equal_to),然后把结果加起来(plus)。如果最终结果等于向量长度,说明两个序列完全一致。

使用技巧小贴士

  • accumulate

    也可以用于字符串拼接、结构体字段提取汇总等。

  • inner_product

    能灵活用于比较、组合、逻辑判断等多种场景。

  • 这两个函数都支持lambda表达式作为操作符,所以扩展性很强。
  • 注意第二个参数是“结束迭代器”,不是最后一个元素的下一个位置!

基本上就这些。这两个函数看起来简单,但一旦掌握好用法,在实际编程中能省不少事。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享