【问题标题】:Is there an STL algo that takes predicate for summing up the elements of a vector in C++是否有一个 STL 算法采用谓词来总结 C++ 中向量的元素
【发布时间】:2021-07-19 04:24:21
【问题描述】:

我一直致力于理解 C++ 库中给出的所有 STL 算法,我们应该避免使用 for_each 和 for 循环来解决问题。在大多数情况下,我能够找到适用的 STL 算法,但我不记得在使用谓词时总结了集合或范围的任何算法,而且我在论坛上也找不到解决方案。我正在使用 C++ 20。

唯一的目标是使用 STL 算法将向量中的偶数与变量相加。

【问题讨论】:

  • 我试过累积,但它不需要谓词。因此,它无法区分奇数或偶数并将它们全部加起来。
  • Accumulate 有一个接受 binary 函数的重载,它的第一个参数是总数,第二个参数是被加数。你当然可以使这个函数的行为以第二个参数的奇偶性为条件。
  • @RaviSharma BinaryOperation 有两个操作数。你可以用这些做你喜欢的事情。您从函数返回新的总数,就像我在回答中显示的那样。
  • @RaviSharma 正确,它不需要谓词。但它不需要。 Ted 的回答演示了如何编写一个仅在右侧为偶数时才执行加法的运算符。

标签: c++ vector stl c++17 c++20


【解决方案1】:

我会使用std::accumulate

例子:

#include <iostream>
#include <numeric>
#include <vector>

int main() {   
    std::vector<int> v{1,2,3,4,5};
    auto result = std::accumulate(v.begin(), v.end(), 0,
        [](auto x, auto y) {
            return y%2==0 ? x+y : x; 
        });
    std::cout << result << '\n';  // prints 6
}

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2021-11-18
    • 2021-04-28
    • 1970-01-01
    • 2020-01-29
    • 2015-07-16
    相关资源
    最近更新 更多