如何用for_each( )算法访问容器中的元素(函数对象的使用方法)
时间: 2024-02-21 19:57:50 浏览: 23
使用for_each算法可以对容器中的每个元素进行操作,函数对象可以作为第三个参数传入for_each函数中,实现对每个元素的操作。
下面是一个示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print(int n) {
cout << n << " ";
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5};
// 使用for_each算法和函数对象print输出每个元素
for_each(nums.begin(), nums.end(), print);
return 0;
}
```
输出结果为:
```
1 2 3 4 5
```
在这个示例中,我们定义了一个函数对象`print`,它的作用是输出一个数字。然后我们使用`for_each`算法和`print`函数对象,对容器`nums`中的每个元素进行操作,输出每个元素的值。
相关问题
如何用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`处理容器中的每个元素。