• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++11新标准for循环和lambda表达式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

在C++11中for扩展了一个新的用法,类似于c#中的foreach.可以用来遍历容器,输出和关联容器等。配合另外的c++11新关键字auto能够很方便的实现遍历。用法如下:

#include <iostream>
 
int main()
{
  std::string myStr = "hello!";
  for(auto ch : myStr)
    std::cout<<ch<<std::endl;
}

上面函数的作用是遍历 string 然后输出其每一个元素。

2 lambda表达式

关于lambda表达式在 C++ Lambda表达式用法C++11 lambda表达式解析 这两篇文章中已经有了比较详细的介绍了。其完整表达式为:

[ capture ] ( params ) mutable exception attribute -> ret { body }

这里对 capture 进行补充说明一下,上面的第二篇文章将这个翻译为捕获,第一遍看到的时候比较困惑。后来才发现这个其实就是指定了lambda表达式作为函数对象其构造函数传递进来的参数是什么,只有传递进来的参数lambda表达式才可以使用, 即lambda表达式会生成一个重载了()操作的函数对象,该对象的构造函数参数由[]内参数指定 。其他的没有什么好补充的。可以在支持c++11标准的编译器上运行下面代码感受一下:

#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
 
class LessFunction
{
public:
    LessFunction(int threshold) :Threshold(threshold) {}
 
    bool operator () (int n)
    {
        return n < Threshold;
    }
private:
    int Threshold;
 
};
 
int main()
{
    //使用普通的函数对象
    std::vector<int> a { 1,2,3,4,5,6,7 };
    LessFunction myFun(5);
    a.erase(std::remove_if(a.begin(), a.end(), myFun), a.end());
    std::cout << "a:" ;
    for (auto i : a)
        std::cout << i << " ";
    std::cout << std::endl;
 
    //使用lambda表达式,以值传递的方式将x作为函数对象的构造函数参数
    std::vector<int> b{ 1,2,3,4,5,6,7 };
    int x = 5;
    b.erase(std::remove_if(b.begin(), b.end(), [x](int n) {return n < x; }), b.end());
    std::cout << "b:" ;
    for (auto i : b)
        std::cout << i << " ";
    std::cout << std::endl;
 
    

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
oracle函数RAWTOHEX(c1)发布时间:2022-07-14
下一篇:
C#的串口编程发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap