大多数函数式编程语言(例如通用Lisp、Scheme / Racket、Clojure、Haskell、Scala、Ocaml、SML)支持列表上的一些常见的高阶函数,如map、filter、takeWhile、dropWhile、foldl、foldr (例如方案/球拍,Clojure并排参考表,普通Lisp、哈斯克尔、Scala、OCaml和SML文档)。
C++11在列表上是否有等效的标准方法或函数?例如,考虑下面的Haskell片段:
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs如何在现代标准C++中表达第二个表达式?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?那么上面提到的其他高阶函数呢?
它们能在C++中直接表达吗?
发布于 2012-10-18 20:35:54
更重要的是,C++具有这样的函数,请查看算法 (或加入C++11)头部:
std::transform
std::for_each
std::remove_copy_if它们可以很容易地与任何容器一起使用。
例如,您的代码可以这样表示(为了便于编码,可以使用C++11 lambda):
std::vector<int> x = {1, 2, 3, 4, 5};
std::vector<int> y;
std::transform(x.begin(), x.end(), std::back_inserter(y), [](int elem){ return elem * elem; });不那么直观,但是您可以轻松地将std::transform调用封装到函数中,它将返回新容器(为了更好的性能而具有move语义)。
https://softwareengineering.stackexchange.com/questions/170464
复制相似问题