C++中std::for_each的使用

 更新时间:2025年04月07日 10:27:12   作者:点云SLAM  
std::for_each是C++标准库中的一个算法,用于遍历容器并对每个元素执行指定的操作,本文就来介绍一下C++中std::for_each的使用,感兴趣的可以了解一下

std::for_each的使用

std::for_each 是 C++ 标准库中的一个算法,用于遍历容器并对每个元素执行指定的操作。适用于 std::vectorstd::liststd::array 等标准容器。

1. 语法

#include <algorithm>

template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f);
  • first:起始迭代器(包含)。
  • last:结束迭代器(不包含)。
  • f:对元素执行的函数对象,接受单个参数。

返回值:
返回 f,即传入的函数对象(可用于累积状态)。

2. 基本用法

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用 std::for_each 遍历并打印元素
    std::for_each(vec.begin(), vec.end(), [](int x) {
        std::cout << x << " ";
    });

    return 0;
}

输出

1 2 3 4 5

3. 使用普通函数

#include <iostream>
#include <vector>
#include <algorithm>

// 普通函数
void printElement(int x) {
    std::cout << x << " ";
}

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    std::for_each(vec.begin(), vec.end(), printElement);

    return 0;
}

4. 使用 std::for_each 计算累积和

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    int sum = 0;

    std::for_each(vec.begin(), vec.end(), [&sum](int x) {
        sum += x;
    });

    std::cout << "Sum: " << sum << std::endl;

    return 0;
}

输出

Sum: 15

这里使用了 Lambda 捕获 [&sum] 来累加元素值。

5. 使用 std::for_each 修改元素

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用 std::for_each 修改元素
    std::for_each(vec.begin(), vec.end(), [](int &x) {
        x *= 2;
    });

    // 输出修改后的值
    for (int num : vec) {
        std::cout << num << " ";
    }

    return 0;
}

输出

2 4 6 8 10

注意:需要传递 int &x 才能修改原数据。

6. 与 range-based for 循环对比

使用 for_each 适用于需要函数对象(如 Lambda 或 functor),但 C++11 之后的 范围 for 循环 更简洁:

for (int &x : vec) {
    x *= 2;
}

相比 std::for_each,范围 for 在可读性上更好。

7. for_each 与函数对象

可以使用自定义仿函数:

#include <iostream>
#include <vector>
#include <algorithm>

struct Multiply {
    void operator()(int &x) const {
        x *= 3;
    }
};

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    std::for_each(vec.begin(), vec.end(), Multiply());

    for (int num : vec) {
        std::cout << num << " ";
    }

    return 0;
}

输出

3 6 9 12 15

仿函数 适用于复杂操作或需要在多个地方复用时。

8. 总结

方法可读性适用场景
std::for_each适中需要 Lambda、仿函数或函数指针
range-based for适用于大多数遍历任务
普通 for 循环需要索引访问元素

当代码需要传递回调(如 std::transform 或 std::accumulate 结合使用)时,std::for_each 更合适,否则推荐 范围 for 语法。

到此这篇关于C++中std::for_each的使用的文章就介绍到这了,更多相关C++ std::for_each内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • OpenSSL使用AES实现文件加解密功能

    OpenSSL使用AES实现文件加解密功能

    AES是一种对称加密算法,它是目前广泛使用的加密算法之一,意味着加密和解密使用相同的密钥,这就要求密钥的安全性非常重要,因为任何拥有密钥的人都能进行加密和解密操作,本文给大家介绍了OpenSSL如何使用AES实现文件加解密功能,需要的朋友可以参考下
    2023-11-11
  • C语言实现电子时钟程序

    C语言实现电子时钟程序

    这篇文章主要为大家详细介绍了C语言实现电子时钟程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • C语言求质数的几种简单易懂方式

    C语言求质数的几种简单易懂方式

    这篇文章主要介绍了C语言求质数的几种简单易懂方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • C++ ostream用法案例详解

    C++ ostream用法案例详解

    这篇文章主要介绍了C++ ostream用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 关于《C和指针》的学习笔记

    关于《C和指针》的学习笔记

    本篇文章是对《C和指针》这本书的学习做了笔记介绍。需要的朋友参考下
    2013-05-05
  • C语言驱动开发之内核使用IO/DPC定时器详解

    C语言驱动开发之内核使用IO/DPC定时器详解

    本章将继续探索驱动开发中的基础部分,定时器在内核中同样很常用,在内核中定时器可以使用两种,即IO定时器,以及DPC定时器,感兴趣的可以了解一下
    2023-04-04
  • 详解C/C++中的select、poll和epoll

    详解C/C++中的select、poll和epoll

    本文通过示例介绍了C/C++中的select、poll和epoll知识,结合示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-06-06
  • C/C++利用libxml2高效输出XML大文件详解

    C/C++利用libxml2高效输出XML大文件详解

    这篇文章主要给大家介绍了关于C/C++利用libxml2高效输出XML大文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • C语言如何实现一些算法或者函数你知道吗

    C语言如何实现一些算法或者函数你知道吗

    这篇文章主要为大家详细介绍了C语言实现一些算法或者函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++ Boost log日志库超详细讲解

    C++ Boost log日志库超详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11

最新评论