如何用for_each( )算法访问容器中的元素(函数对象的使用方法)
时间: 2024-02-24 22:00:36 浏览: 22
使用for_each()算法可以遍历容器中的每个元素,并对每个元素执行一个函数。这个函数可以是一个函数指针、函数对象或lambda表达式。
下面是一个示例代码,演示如何使用for_each()算法访问容器中的元素:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
//定义一个函数对象
struct Print {
void operator()(int value) const {
std::cout << value << " ";
}
};
int main() {
std::vector<int> vec{1, 2, 3, 4, 5};
//使用函数对象Print遍历容器中的每个元素,并打印出来
std::for_each(vec.begin(), vec.end(), Print());
return 0;
}
```
在上面的示例代码中,我们定义了一个名为Print的函数对象,它重载了()运算符,接受一个int类型的参数,并打印这个参数的值。然后,我们使用for_each()算法遍历了容器vec中的每个元素,对于每个元素,都调用了Print函数对象的()运算符,从而打印出了容器中的所有元素。
需要注意的是,for_each()算法中的第三个参数是函数对象的实例,这里使用了Print()的方式创建了一个函数对象的实例。如果是函数指针或lambda表达式,可以直接传递函数指针或lambda表达式。
相关问题
如何用for_each( )算法访问容器中的元素(函数对象的使用方法);
使用 for_each() 算法可以遍历容器中的所有元素,并对每个元素执行指定的函数操作。以下是使用 for_each() 算法的一般格式:
```c++
template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f);
```
其中,`InputIt` 是容器的迭代器类型,`UnaryFunction` 是一个函数对象类型,`f` 是一个函数对象,用于操作容器中的每个元素。
下面是示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print(int i) {
cout << i << " ";
}
int main() {
vector<int> v{1, 2, 3, 4, 5};
// 使用 lambda 表达式作为函数对象
for_each(v.begin(), v.end(), [](int i) {
cout << i << " ";
});
cout << endl;
// 使用全局函数作为函数对象
for_each(v.begin(), v.end(), print);
cout << endl;
return 0;
}
```
输出结果:
```
1 2 3 4 5
1 2 3 4 5
```
在上面的示例中,我们使用了 lambda 表达式和全局函数作为函数对象,分别输出容器中的每个元素。
for_each处理函数传参
`for_each`是C++ STL中的一个算法函数,用于对容器中的每个元素执行同一个操作。其函数原型如下:
```cpp
template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f);
```
其中,`InputIt`是输入迭代器类型,表示要遍历的容器的起始和终止迭代器;`UnaryFunction`是函数对象类型,表示要执行的操作。
在调用`for_each`时,我们需要传入一个函数对象,这个函数对象接受一个参数,表示容器中的一个元素,函数对象对这个元素执行一些操作。
例如,我们可以定义一个函数对象,将容器中的每个元素乘以2,代码如下:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
struct MultiplyByTwo {
void operator()(int& n) const { n *= 2; }
};
int main() {
std::vector<int> v{1, 2, 3, 4, 5};
// 调用 for_each,将容器中的每个元素乘以2
std::for_each(v.begin(), v.end(), MultiplyByTwo());
for (int n : v) {
std::cout << n << ' ';
}
std::cout << '\n';
}
```
输出结果为:
```
2 4 6 8 10
```
在上面的例子中,我们定义了一个名为`MultiplyByTwo`的函数对象,它的`operator()`函数接受一个参数`n`,将`n`乘以2。我们将这个函数对象传给`for_each`,然后调用`for_each`处理容器中的每个元素。