for_each是C++标准库算法,定义于<algorithm>中,用于遍历容器并执行操作。它接受起始和结束迭代器及一个可调用对象(如函数、Lambda),对每个元素应用该操作。示例显示:可用Lambda打印元素、通过引用修改值、或传入普通函数处理数据。相比传统for循环,for_each更简洁安全,尤其适合与Lambda结合使用,提升代码可读性,且不改变容器结构但可修改元素值。
在C++中,for_each 是一个标准库算法,定义在 algorithm 头文件中。它用于对容器中的每个元素执行指定的操作(函数或函数对象)。相比传统的 for 循环,for_each 更加简洁、安全,并能与 Lambda 表达式结合使用,提升代码可读性。
基本语法
std::for_each(开始迭代器, 结束迭代器, 操作)
- 第一个参数是起始迭代器
- 第二个参数是结束迭代器(不包含)
- 第三个参数是一个可调用对象:函数指针、函数对象或 Lambda 表达式
示例1:使用Lambda表达式打印元素
下面的代码使用 for_each 遍历 vector 并打印每个元素:
#include <iostream><br>#include <vector><br>#include <algorithm><br><br>int main() {<br> std::vector<int> numbers = {1, 2, 3, 4, 5};<br><br> std::for_each(numbers.begin(), numbers.end(),<br> [](int n) {<br> std::cout << n << " ";<br> });<br> std::cout << std::endl; // 输出: 1 2 3 4 5<br> return 0;<br>}
示例2:修改容器中的元素
你可以通过引用捕获来修改容器中的值:
立即学习“C++免费学习笔记(深入)”;
#include <iostream><br>#include <vector><br>#include <algorithm><br><br>int main() {<br> std::vector<int> numbers = {1, 2, 3, 4, 5};<br><br> std::for_each(numbers.begin(), numbers.end(),<br> [](int& n) {<br> n *= 2; // 将每个元素乘以2<br> });<br><br> // 打印结果<br> for (int n : numbers) {<br> std::cout << n << " "; // 输出: 2 4 6 8 10<br> }<br> std::cout << std::endl;<br> return 0;<br>}
示例3:使用普通函数
你也可以传入一个普通函数作为操作:
#include <iostream><br>#include <vector><br>#include <algorithm><br><br>void printSquare(int n) {<br> std::cout << n * n << " ";<br>}<br><br>int main() {<br> std::vector<int> numbers = {1, 2, 3, 4, 5};<br> std::for_each(numbers.begin(), numbers.end(), printSquare);<br> std::cout << std::endl; // 输出: 1 4 9 16 25<br> return 0;<br>}
基本上就这些。使用 for_each 可以让遍历更清晰,尤其适合配合 Lambda 使用。注意它不会改变容器结构,但可以通过引用修改元素值。不复杂但容易忽略的是:记得包含 <algorithm> 头文件。
评论(已关闭)
评论已关闭