用C++写一个foreach函数式风格的函数
时间: 2023-12-27 11:06:49 浏览: 33
好的,我可以帮你解答。下面是一个用 C 语言编写的 foreach 函数式风格的函数的示例代码:
```
#include <stdio.h>
void foreach(int *arr, int len, void (*func)(int)) {
for (int i = 0; i < len; i++) {
func(arr[i]);
}
}
void printNum(int num) {
printf("%d ", num);
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int len = sizeof(arr) / sizeof(int);
foreach(arr, len, printNum); // 输出:1 2 3 4 5 6 7 8 9 10
return 0;
}
```
在这个例子中,我们定义了一个 foreach 函数,该函数接受一个整数数组、数组长度和一个指向函数的指针。该函数将数组元素作为参数传递给指定的函数,从而允许我们在循环中执行自定义的操作。
在 main 函数中,我们定义了一个整数数组,使用 sizeof 运算符和 sizeof(int) 来获取其长度。然后,我们传递数组、长度和一个打印整数的函数指针给 foreach 函数,以便循环遍历数组中的每个元素,并将其传递给打印函数。
最终,该程序将输出整数数组中的所有元素,即“1 2 3 4 5 6 7 8 9 10”。希望对你有所帮助!
相关问题
写一个foreach函数的案例
以下是一个示例代码,它使用foreach函数来遍历一个数组并打印出每个元素的值:
```
$fruits = array("apple", "banana", "orange", "mango");
foreach ($fruits as $fruit) {
echo $fruit . "<br>";
}
```
输出:
```
apple
banana
orange
mango
```
该示例代码定义了一个包含四个元素的数组 `$fruits`,然后使用 `foreach` 循环遍历该数组。在每次循环中,将数组中的元素赋值给变量 `$fruit`,并使用 `echo` 函数打印出该元素的值。
因此,该示例代码可以打印出数组 `$fruits` 中的所有元素值。
c++ foreach函数
C++中的for_each是一个通用的算法,用于对容器中的所有元素执行给定的函数。它是C++标准库的一部分,定义在<algorithm>头文件中。for_each函数主要用于遍历容器,如vector、list、set等,对容器中的每个元素执行特定操作。其函数原型如下:
template <class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function fn);
要使用并行版本的std::for_each,需要包含<execution>头文件,并将合适的执行策略传递给函数。下面是一个简单示例,演示了如何使用并行std::for_each遍历std::vector容器,并为每个元素加1:
#include <iostream>
#include <vector>
#include <algorithm>
#include <execution>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::for_each(std::execution::par, numbers.begin(), numbers.end(), [](int& value) {
value++;
});
for (int number : numbers) {
std::cout << number << " ";
}
return 0;
}
除了使用lambda表达式,你还可以使用仿函数(Function Object)作为for_each的第三个参数。下面是一个使用仿函数的示例:
#include <iostream>
#include <vector>
#include <algorithm>
class Fun {
public:
void operator()(const int num) {
std::cout << num << " ";
}
};
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::for_each(numbers.begin(), numbers.end(), Fun());
return 0;
}