// Lambda.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<functional>
void Print(const int &elem)
{
cout << elem << "\t";
}
class C_Print
{
public:
void operator()(const int elem)
{
cout << elem<< "\t";
}
};
int main()
{
vector<int> myVect;
/*myVect.push_back(1);
myVect.push_back(2);*/
int iArr[5] = { 4,6,1,87,3 };
myVect.assign(iArr, iArr + 5); //将iArr数组中的所有数据全部放到容器中去注意assign()函数会先将vector中
//的数据进行清空,所以使用assign()的时候要在程序的最前面,在中间尽量不要使用
myVect.push_back(1);
myVect.push_back(2);
//输出vector容器中的内容中的几种方法
//第一种
cout << myVect[3] << endl;
//第二种
cout << myVect.at(4) << endl;
//第三种
vector<int>::iterator myIter = myVect.begin();
for (myIter; myIter != myVect.end(); myIter++)
{
cout << *myIter << "\t";
}
cout << endl;
//第四种
for_each(myVect.begin(), myVect.end(), Print);
cout << endl;
//第五种
for_each(myVect.begin(), myVect.end(), C_Print());
cout << endl;
//第六种 使用lambda
for_each(myVect.begin(), myVect.end(), [](int elem) {cout << elem << "\t"; });
cout << endl;
//使用lambda表达式来查找信息(就像使用仿函数一样)
myIter=find_if(myVect.begin(), myVect.end(), [](const int num) {return(num == 10); });
if (myIter == myVect.end())
{
cout << "没有找到" << endl;
}
else
{
cout << "找到了该数字为" << *myIter << endl;
}
//使用储存状态的lambda表达式来判断一个数字能否被另一个数字整除
//就是在[]中括号中添加变量的方式
cout << "输入要整除的数" << endl;
int div = 0;
cin >> div;
myIter = myVect.begin();
vector<int>::iterator tempIter;
for (myIter; myIter != myVect.end(); myIter++)
{
tempIter = find_if(myIter, myVect.end(), [div](const int elem) {return (elem%div == 0); });
if (tempIter != myVect.end())
{
cout << *tempIter << endl;
}
}
system("pause");
return 0;
}
/*
Lambda 表达式是什么?
for_each(myVect.begin(), myVect.end(), [](int elem) {cout << elem << "\t"; });
将每一个对象作为实参来传入到lambda表达式的形参中去
编译器见到[](int elem){cout<<elem<<"\t";}时,自动将其展开类似为一种仿函数的结构
class C_Print
{
public:
void operator()(const int elem)
{
cout << elem<< "\t";
}
};
所以使用起来更方便简单明了
如何定义lambda表达式?
[](形参列表){操作语句}
必须以[]中括号开头,告诉编译器这是一个lambda表达式,然后是形参列表,在后面的{}以及语句
lambda表达式也可以返回值:
例如下面的lambda表达式在num为偶数时返回true
[](int &num){return num%2==0;}
实际上也可以写成
[](int &num)
{
if(num%2==0)
return true;
else
return false;
}
*/
lambda表达式
最新推荐文章于 2022-02-21 09:18:18 发布