STL中常见的算法及其应用(一)

本文介绍了C++ STL中的遍历算法for_each和transform,以及查找算法find和find_if,提供了详细的函数原型、示例代码和应用场景解析。for_each用于对容器中的每个元素应用函数,transform则用于将源容器元素转换并存储到目标容器。find函数查找指定值的元素,而find_if则根据自定义条件搜索元素。所有这些算法在STL中都扮演着重要角色,提升代码效率。
摘要由CSDN通过智能技术生成

总述:

一、常见的遍历算法 

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;
}

代码解释

  1. 头文件引入

    • <iostream> 用于输出。
    • <vector> 用于创建向量容器。
    • <algorithm> 包含 std::for_each 算法。
  2. 初始化向量

    • 创建并初始化一个 std::vector<int>
  3. 打印元素

    • 使用 std::for_each 遍历向量中的每个元素,并通过一个 lambda 表达式打印它们。for_each 的第一个和第二个参数分别是迭代器的范围,第三个参数是一个函数或可调用对象。
  4. 修改元素

    • 再次使用 std::for_each,这次是用一个修改元素值的 lambda 表达式,将每个元素乘以 2。这里 lambda 函数接受一个引用参数,以便直接修改向量中的元素。
  5. 打印修改后的元素

    • 修改后,再次使用 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
  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值