【发布时间】:2017-04-15 13:24:04
【问题描述】:
我想我们可以像这样使用 std::transform 在 C++ 中复制地图行为:
std::vector<int> in = { 1 , 2 , 3 ,4 };
std::vector<int> out(in.size());
std::transform(in.being() , in.end() , out.begin() , [](const int & val)
{
return val+1;
});
我想更好的方法是使用后插入器。'
std::vector<int> out2;
std::transform(in.begin() , in.end() , std::back_inserter(out2) , [](const int & val){
return val + 1;
});
// out will be { 2 , 3 ,4 ,5 }
我说的对吗?如何使用 STL 在 C++ 中进行过滤和减少操作?
【问题讨论】:
-
定义“更好的方式”对您意味着什么。请记住,如果你问两个 C++ 黑客什么是做 X 的“更好的方法”,你会得到三个不同的答案。
-
“过滤器”可能对应于
std::copy_if和/或std::remove_if。我不确定“减少”应该做什么。 -
@SamVarshavchik 哈哈。你觉得什么更好?有第三种方法吗?这些对我来说都是非常有趣的问题。
-
@IgorTandetnik:reduce/fold 在 C++ 中被称为
std::accumulate -
transform,copy_if,accumulate.
标签: c++ c++11 stl functional-programming