Java 映射过滤器和折叠在C++;

Java 映射过滤器和折叠在C++;,java,c++11,functional-programming,Java,C++11,Functional Programming,我有一个通常非常适合Java流的问题,但我目前正在使用c++11 我用Java解决这个问题的方法是: int solution = myList.stream() //myList is an arraylist of MyClass .mapToInt(MyClass::GetInt) .sum(); 探索了C++标准库后,我才知道 std::transform和std::acculate存在 我唯一的问题是,std::transform似乎只能从类型T映射到类型T,在积累之

我有一个通常非常适合Java流的问题,但我目前正在使用c++11

我用Java解决这个问题的方法是:

int solution = myList.stream() //myList is an arraylist of MyClass
    .mapToInt(MyClass::GetInt)
    .sum();
<>探索了C++标准库后,我才知道
std::transform
std::acculate
存在


我唯一的问题是,
std::transform
似乎只能从类型
T
映射到类型
T
,在积累之前,我需要从类型
T
映射到类型
V
(整数)

理想情况下,我希望能够将此逻辑链接在一起,而不是使用临时数组存储每个步骤的中间结果


有一种惯用的c++11方法可以实现这一点吗?

std::transform可以转换为不同的类型,但这里甚至不需要。您可以通过自定义操作使用
std::accumulate
,如下所示:

int solution = std::accumulate(
  begin(myList), end(myList), 0,
  [](int v, const MyClass &c) { return v + c.GetInt(); }
);
另一种非常接近您发布的Java示例的方法是使用该库:


再次阅读
累积
的文档。然后再说一遍,“似乎它只能从T型映射到T型”-你确定吗?
int solution = boost::accumulate(
  myList | boost::adaptors::transformed(boost::mem_fn(&MyClass::GetInt)),
  0
);