std::for_each用于遍历容器元素并执行操作,需包含头文件,支持函数指针、仿函数和lambda表达式,常用lambda实现简洁遍历。

在C++中,std::for_each 是一个来自 gorithm> 头文件的算法函数,用于对容器中的每个元素执行指定的操作。它比传统的 for 循环更简洁、更具函数式编程风格,同时支持函数指针、函数对象(仿函数)和 lambda 表达式。
1. 包含必要的头文件
使用 std::for_each 前,需包含 和所用容器的头文件:
#include
#include
#include iostream>
2. 基本语法
std::for_each 的基本用法如下:
std::for_each(起始迭代器, 结束迭代器, 操作函数);
它会从起始迭代器到结束迭代器(前闭后开区间)遍历每个元素,并对每个元素调用指定的操作。
立即学习“C++免费学习笔记(深入)”;
3. 使用 lambda 表达式遍历
lambda 是最常用的方式,简洁直观:
std::vector numbers = {1, 2, 3, 4, 5};std::for_each(numbers.begin(), numbers.end(), [](int n) { std::cout << n << " ";});// 输出: 1 2 3 4 5
也可以修改元素(需按引用捕获):
std::for_each(numbers.begin(), numbers.end(), [](int& n) { n *= 2;});// 此时 numbers 变为 {2, 4, 6, 8, 10}
4. 使用函数指针
定义一个普通函数,然后传入 for_each:
void print(int n) { std::cout << n << " ";}std::for_each(numbers.begin(), numbers.end(), print);
5. 使用函数对象(仿函数)
定义一个重载了 operator() 的类:
struct Print { void operator()(int n) { std::cout << n << " "; }};std::for_each(numbers.begin(), numbers.end(), Print{});
6. 遍历其他容器
for_each 适用于所有支持迭代器的标准容器,如 std::list、std::deque、std::array 等:
std::list words = {"hello", "world"};std::for_each(words.begin(), words.end(), [](const std::string& s) { std::cout << s << std::endl;});
注意:对于 std::map 或 std::unordered_map,元素是 std::pair,需访问 first 和 second:
std::map m = {{1, "one"}, {2, "two"}};std::for_each(m.begin(), m.end(), [](const auto& pair) { std::cout << pair.first << ": " << pair.second << std::endl;});
基本上就这些。std::for_each 提供了一种清晰、安全的方式来遍历和操作容器元素,配合 lambda 使用非常高效。
以上就是C++如何在容器中使用for_each遍历元素的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1475005.html
微信扫一扫
支付宝扫一扫