C++函数用法详解(新手必看,附带实例)
C++ 中的函数是一个封装了可以执行特定任务的代码块,它接受一些参数并返回一个值。
在实际编程和算法竞赛中,我们经常使用函数来提高代码的可读性和重用性,减少代码冗余,并以模块化方式解决问题。
有些算法必须使用函数来实现,或者说,使用函数实现会更加高效,例如递归、DFS搜索、最短路径等。
函数的实现包括函数的具体代码,其格式如下:
需要注意的是,一个函数内部可以同时包含多个 return 语句,只能返回一次,一旦执行了 return 语句,函数就会终止,函数中的后续代码将不再执行。
Lambda 函数可以在需要函数但不想定义函数的地方使用。例如,我们可以使用 Lambda 函数来定义一个自定义的排序规则:
Lambda 函数可以捕获外部变量,使得代码更加灵活。例如,我们可以定义一个 Lambda 函数,它捕获了外部的变量 x:
Lambda 函数的捕获列表还可以采用其他方式,例如使用“=”表示通过值捕获所有变量的拷贝,而使用“&”表示通过引用捕获所有外部变量。
在实际编程和算法竞赛中,我们经常使用函数来提高代码的可读性和重用性,减少代码冗余,并以模块化方式解决问题。
有些算法必须使用函数来实现,或者说,使用函数实现会更加高效,例如递归、DFS搜索、最短路径等。
C++函数的声明和实现
函数的声明包括函数名、返回类型、参数列表等。例如,下面是一个名为 sum 的函数,它接受两个整数作为参数,并返回它们的和:int sum(int a, int b);这是函数的声明,告诉编译器有一个名为 sum 的函数,但并没有提供具体的实现。
函数的实现包括函数的具体代码,其格式如下:
【返回类型】 【函数名】(参数表) { 函数体 }示例如下:
int sum(int a, int b) { return a + b; }在这里,我们实现了 sum() 函数,它返回 a 和 b 的和。函数的声明和实现可以在同一个地方,也可以分开。如果分开,通常将函数的声明放在头文件中,函数的实现放在源文件中。
需要注意的是,一个函数内部可以同时包含多个 return 语句,只能返回一次,一旦执行了 return 语句,函数就会终止,函数中的后续代码将不再执行。
C++函数的调用
当我们需要使用函数时,可以通过函数名和参数列表来调用它。例如,可以调用上面的 sum() 函数来计算 1 和 2 的和:int result = sum(1, 2);在这里,sum(1, 2) 就是函数的调用,它会返回 1 和 2 的和,然后将结果赋值给 result。
C++ Lambda函数
C++11 引入了一种新的函数类型,称为 Lambda 函数,也称为匿名函数。Lambda 函数可以在需要函数但不想定义函数的地方使用。例如,我们可以使用 Lambda 函数来定义一个自定义的排序规则:
vector<int> v = {3, 1, 4, 1, 5, 9}; sort(v.begin(), v.end(), [](int a, int b) { return a > b; // 降序排序 });在这里,我们定义了一个 Lambda函数
[](int a, int b) { return a > b; }
,它接受两个整数作为参数,并返回它们的比较结果。然后将这个 Lambda 函数传递给 sort() 函数,告诉它我们需要按照降序排序。Lambda 函数可以捕获外部变量,使得代码更加灵活。例如,我们可以定义一个 Lambda 函数,它捕获了外部的变量 x:
int x = 10; auto is_less_than_x = [x](int a) { return a < x; };在这里,is_less_than_x 是一个函数,它接受一个整数 a,返回 a 是否小于 x。这段代码使用了 auto 关键字自动推导函数的返回值类型,这个特性需要在 C++11 标准以上才能实现,否则会报错。但是请注意,尽管使用了 auto 进行自动推导,返回值类型也只能是一种,不能“在不同的函数出口返回不同的类型”。
Lambda 函数的捕获列表还可以采用其他方式,例如使用“=”表示通过值捕获所有变量的拷贝,而使用“&”表示通过引用捕获所有外部变量。