总述:
一、常见的遍历算法
1、for_each//遍历容器
函数原型:
for_each(iterator beg, iterator end, _func);
beg:开始迭代器;
end:结束迭代器;
_func:函数或者函数对象;
总结:for_each函数在STL中十分重要,需要熟练掌握
示例:
std::for_each
是 C++ 标准模板库中的一种算法,用于对容器中的每个元素应用一个函数。这是一个非常灵活的函数,可以用于执行多种操作,如打印容器中的元素、修改它们的值等。下面是一个使用 std::for_each
函数的示例代码,其中包括了对每个元素执行打印操作的用法。
#include <iostream>
#include <vector>
#include <algorithm> // 包含 for_each
int main() {
// 创建一个向量并初始化
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用 for_each 打印向量的每个元素
std::cout << "Vector elements: ";
std::for_each(vec.begin(), vec.end(), [](int x) {
std::cout << x << " ";
});
std::cout << std::endl;
// 使用 for_each 修改向量的每个元素
std::for_each(vec.begin(), vec.end(), [](int& x) {
x *= 2; // 将每个元素乘以2
});
// 再次使用 for_each 打印修改后的向量元素
std::cout << "Modified vector elements: ";
std::for_each(vec.begin(), vec.end(), [](int x) {
std::cout << x << " ";
});
std::cout << std::endl;
return 0;
}
代码解释
-
头文件引入:
<iostream>
用于输出。<vector>
用于创建向量容器。<algorithm>
包含std::for_each
算法。
-
初始化向量:
- 创建并初始化一个
std::vector<int>
。
- 创建并初始化一个
-
打印元素:
- 使用
std::for_each
遍历向量中的每个元素,并通过一个 lambda 表达式打印它们。for_each
的第一个和第二个参数分别是迭代器的范围,第三个参数是一个函数或可调用对象。
- 使用
-
修改元素:
- 再次使用
std::for_each
,这次是用一个修改元素值的 lambda 表达式,将每个元素乘以 2。这里 lambda 函数接受一个引用参数,以便直接修改向量中的元素。
- 再次使用
-
打印修改后的元素:
- 修改后,再次使用
std::for_each
和一个打印 lambda 表达式来显示更新后的元素。
- 修改后,再次使用
这段代码展示了 std::for_each
的两个常见用途:处理和显示元素、修改容器中的元素。通过 lambda 表达式,我们可以轻松地为每个元素指定操作,使得 std::for_each
非常灵活和强大。
2、transform函数
功能:搬运容器到另一个容器中(在搬运前目标容器必须先开辟空间,否则会报错)
函数原型:
transform(iterator beg1, iterator end1, iterator beg2, _func);
beg1:源容器开始迭代器
end1 源容器结束迭代器
beg2 目标容器开始迭代器
_func 函数或者函数对象
示例代码:
#include <iostream>
#include <vector>
#include <algorithm> // 包含 transform
int main() {
std