首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11对高阶列表函数的支持

C++11对高阶列表函数的支持
EN

Software Engineering用户
提问于 2012-10-18 20:10:46
回答 1查看 9K关注 0票数 13

大多数函数式编程语言(例如通用Lisp、Scheme / Racket、Clojure、Haskell、Scala、Ocaml、SML)支持列表上的一些常见的高阶函数,如mapfiltertakeWhiledropWhilefoldlfoldr (例如方案/球拍,Clojure并排参考表,普通Lisp哈斯克尔ScalaOCamlSML文档)。

C++11在列表上是否有等效的标准方法或函数?例如,考虑下面的Haskell片段:

代码语言:javascript
复制
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs

如何在现代标准C++中表达第二个表达式?

代码语言:javascript
复制
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?

那么上面提到的其他高阶函数呢?

它们能在C++中直接表达吗?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2012-10-18 20:35:54

更重要的是,C++具有这样的函数,请查看算法 (或加入C++11)头部:

代码语言:javascript
复制
std::transform
std::for_each
std::remove_copy_if

它们可以很容易地与任何容器一起使用。

例如,您的代码可以这样表示(为了便于编码,可以使用C++11 lambda):

代码语言:javascript
复制
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语义)。

票数 17
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/170464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档