首页 > 编程语言 >C++ 函数指针与Lambda匿名函数

C++ 函数指针与Lambda匿名函数

时间:2023-08-20 16:58:10浏览次数:48  
标签:std 函数 int 捕获 C++ ForEach 函数指针 Lambda

函数指针

c语言学过了,这里简单记一下,下面举例一个用法就行:

#include<iostream>
#include<vector>

template <class T>
void print(T v) {
	std::cout << v << std::endl;
}

template <class T1, class Func>
void ForEach(std::vector<T1> &v, Func func) {
	for (T1 &value : v) {
		func(value);
	}
}

int main() {
	std::vector<int> v = { 1,1,4,5,1,4 };
	ForEach(v,print<int>);
	ForEach(v, [](int& a) { a++; });
	ForEach(v, print<int>);
	return 0;
}

比如这个代码,foreach便利出数据,具体执行什么操作,就可以通过函数指针传入。

Lambda匿名函数

匿名函数结构

[](){}
[]: 捕获
():参数表
{}:里面写函数内容

捕获

捕获可以让函数使用外部的值。

  • [] 什么都不捕获
  • [&] 引用捕获,可以修改值
  • [=] 按值捕获,不可以修改值

例子

	int c = 1;
	auto y = [=](int a, int b) {
		return a + b + c;
	};
	std::cout << y(1,2) << std::endl;

因为不需要修改c的值,所以按值捕获。结果是4.

标签:std,函数,int,捕获,C++,ForEach,函数指针,Lambda
From: https://www.cnblogs.com/orzmiku/p/17644234.html

相关文章

  • C++ Template
    Template模板,其他语言叫泛型,或者说是泛型的爷爷的爷爷(模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。直接上例子例一先看这段代码:#inc......
  • C++ 可见性
    可见性比较简单,很好理解,长话短说=v=外部的类派生类同一个类private不可访问不可访问可以访问protected不可访问可以访问可以访问public可以访问可以访问可以访问#include<iostream>usingnamespacestd;classA{private: intx;protected......
  • C++ 成员初始化列表
    成员初始化列表成员初始化列表时对象初始化成员变量的一种方法。使用方式如下(两种书写习惯)ClassName(args):varName1(value),...,varNameN(value){//这是一个构造函数//...CODE...}ClassName(args):varName1(value),...,varNameN(value){//这......
  • C++ const和mutable
    const和mutable这里只说const在c++中的特殊用法。用const修饰函数的成员函数。被const修饰的成员函数无法修改函数内的其他成员。可以认为这个函数变成了一个“只读”的状态。Likethis://注意const在括号后面,不要写成constxxxxx(){...}了intgetStatus()const{ returnm......
  • C++ new和delete
    new关键字在C++中,当我们在函数内声明一个变量时,变量会被放在栈(stack)中。栈中的内存离开代码块就被释放了。而且栈的内存很小,当我们声明了大量变量可能会导致内存不足。内存除了栈以外,还有堆(heap),当我们在函数外声明一个全局变量时,这个变量就放在堆上。堆是程序未使用的内存,可以被......
  • c++ 丢失笔记 [运算符重载、this指针、复制与拷贝构造、生存周期、箭头操作符]
    运算符重载、this指针、复制与拷贝构造、生存周期、箭头操作符有一部分是学校的OJ里做题需要就提前学了,然后没记笔记,有一部分是笔记丢了。不打算补这些笔记。不过还是在这里mark一下++运算符的重载。因为++运算符可以前置也可以后置,所以这里需要注意一下,如果是后置++,需要一个in......
  • C++ 隐式转换与explicit关键字
    隐式转换与explicit关键字隐式转换函数构造的隐式转换,直接上代码:#include<bits/stdc++.h>classEntity{private: std::stringm_Name; intm_Age;public: Entity(conststd::string&name) :m_Name(name),m_Age(-1){} Entity(intage) :m_Name("Unknown"),m_A......
  • C++ Vector数组优化
    Vector数组优化问题这是一段没有优化的代码:#include<iostream>#include<vector>classEntity{public: intx,y;public: Entity(intx,inty) :x(x),y(y){} Entity(constEntity&e) :x(e.x),y(e.y){ std::cout<<"Copied!"<<st......
  • C++ 智能指针
    智能指针使用智能指针需要引入memory头文件unique_ptr#include<iostream>#include<string>#include<memory>classEntity{public: Entity(){ std::cout<<"CreatedEntity!"<<std::endl; } ~Entity(){ std::cout<<&q......
  • C++ 链接库
    C++中使用库分为两种,静态库和动态库。简单来说,静态库最后会被编译进二进制文件,动态库不会,需要二进制文件从外部载入。以下操作均在VisualStudio2022中进行,以32位GLFW为例子(glfw.org)。首先下载glfw32位的可执行程序。在解决方案目录创建一个Dependencies文件夹(名字无所谓),然后......