std::for_each()

头文件

cpp 复制代码
#include <algorithm>

当给定一个容器范围,我们通常需要对其中的每个元素执行相同的操作。这样的操作可能包括打印元素、修改元素的值或应用一个自定义函数等等。在 C++ 标准库中,std::for_each() 算法函数提供了一种方便的方式来对容器范围内的元素执行指定的操作。

std::for_each() 函数接受三个参数:给定范围的起始迭代器、终止迭代器和一个可调用对象。它通过循环遍历范围内的每个元素,并将该元素传递给可调用对象进行处理。

函数原型

cpp 复制代码
template< class InputIt, class UnaryFunction >
UnaryFunction for_each( InputIt first, InputIt last, UnaryFunction f );

参数解析

first 和 last 是表示范围的迭代器对,表示要遍历的元素范围。范围为左闭右开区间 [first, last)。

f 是一个可调用对象(函数、函数对象或 Lambda 表达式),它将被应用于范围内的每个元素。

用法

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
 
// 定义一个函数对象
struct PrintElement {
    void operator()(int x) const {
        std::cout << x << " ";
    }
};
 
int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
 
    // 使用函数对象打印每个元素
    std::for_each(nums.begin(), nums.end(), PrintElement());
 
    return 0;
}

输出结果为:1 2 3 4 5

在这个示例中,我们定义了一个名为 PrintElement 的函数对象,并重载了圆括号操作符,使其可以像函数一样调用。PrintElement 的实例被传递给 std::for_each() 函数作为操作函数。在每次调用时,它会将当前元素的值打印到标准输出流。

使用 std::for_each() 函数时,我们可以选择使用函数对象、函数指针或 Lambda 表达式作为操作函数。无论我们选择哪种方式,std::for_each() 都会自动遍历容器范围内的每个元素,并将每个元素传递给操作函数进行处理。

总结一下,std::for_each() 是一个非常方便的算法函数,可用于对容器中的元素执行相同的操作。通过传递操作函数到 std::for_each() 中,我们可以避免手动编写循环并提高代码的可读性和简洁性。

相关推荐
mqiqe2 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
gugucoding2 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
Nebula_g3 小时前
JavaSE基础语法:面向对象高级(代码中的成分)
java·开发语言·编程·javase·技术栈·高级语法
for_ever_love__3 小时前
python基础语法学习: 异常的传递性
开发语言·python·学习
依然鸣4 小时前
PTA团体程序设计天梯赛L1真题讲解L1-077-080
开发语言·c++·算法·深度优先·pat考试·图论
byxdaz4 小时前
QT中服务使用
开发语言·qt
库玛西5 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
caimouse6 小时前
ReactOS 图形系统分析(19):颜色转换对象 — XLATEOBJ(xlateobj.c/h)
c语言·开发语言
liulilittle6 小时前
无锁并发容器的设计与实现原理
开发语言·c++·set·map·并发·无锁·lock-free
朋克洛德的码农6 小时前
Go并发-sync包四剑客:Mutex、RWMutex、WaitGroup、Once-从入门到原理
开发语言·后端·golang