码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • STL的常用遍历算法(20221128)


    STL的常用算法

    概述:

    算法主要是由头文件 组成。

    是所有STL头文件中最大的一个,涉及比较、交换、查找、遍历等等;

    定义了一些模板类,用于声明函数对象;

    体积很小,只包括几个在序列上面进行简单数学运算的模板函数。

    一、遍历算法

    for_each //遍历容器

    transform //搬运容器到另一个容器中

    1、for_each遍历

    for_each(iterator beg,iterator end,_func);

    beg:开始迭代器

    end;结束迭代器

    _func:函数或函数对象

    1. //普通函数
    2. void printVector(int val)
    3. {
    4.     cout << val << " ";
    5. }
    6. //仿函数
    7. class Print {
    8. public:
    9.     void operator()(int val)
    10.     {
    11.         cout << val << " ";
    12.     }
    13. };
    14. void test01()
    15. {
    16.     //for_each遍历
    17.     vector<int>V;
    18.     for (int i = 0; i < 10; i++)
    19.     {
    20.         V.push_back(i);
    21.     }
    22.     for_each(V.begin(), V.end(),printVector);//用普通函数遍历  0 1 2 3 4 5 6 7 8 9
    23.     cout << endl;
    24.     for_each(V.begin(), V.end(),Print());//用仿函数遍历 传入一个匿名对象 0 1 2 3 4 5 6 7 8 9
    25. }

    2、transform

    搬运容器到另一个容器中。

    函数原型:

    transform(iterator beg,iterator end, iterator beg1 ,_func);

    beg:开始迭代器

    end;结束迭代器

    beg1:搬运的目标容器的开始迭代器

    _func:函数或函数对象

    1. class Transform {
    2. public:
    3.     int operator()(int val)
    4.     {
    5.         return val;
    6.     }
    7. };
    8. class TransformTenTime {
    9. public:
    10.     int operator()(int val)
    11.     {
    12.         return 10*val;
    13.     }
    14. };
    15. void test02()
    16. {
    17.     //transform
    18.     vector<int>V;
    19.     for (int i = 0; i < 10; i++)
    20.     {
    21.         V.push_back(i);
    22.     }
    23.     vector<int>target;
    24.     target.resize(V.size());//目标容器需要提前开辟空间
    25.     transform(V.begin(), V.end(), target.begin(), Transform()); //仿函数搬运 Transform()为匿名对象
    26.     for_each(target.begin(), target.end(), Print()); //0 1 2 3 4 5 6 7 8 9
    27.     cout << endl;
    28.     //若想在搬运中做一些运算,可以自己在仿函数写
    29.     transform(V.begin(), V.end(), target.begin(), TransformTenTime()); //10倍搬运 TransformTenTime()为匿名对象
    30.     for_each(target.begin(), target.end(), Print()); // 0 10 20 30 40 50 60 70 80 90
    31. }

  • 相关阅读:
    【二叉树:1】二叉树的遍历、查找以及删除操作(Java编写)
    花几分钟整点jmeter花活,轻松超越90%软件测试
    在DevTool的源代码栏打开控制台界面
    SAP Spartacus home 页面读取 product 数据的请求的 population 逻辑
    黑芝麻智能完成上市备案,这一次国产汽车芯片真得崛起了?
    《数据:挖掘价值,洞察未来
    Go 语言 结构体链表
    直面秋招:非科班生背水一战,最终拿下阿里字节等大厂offer
    2022最新版-李宏毅机器学习深度学习课程-P26 自注意力机制
    【axios三部曲】一、使用axios
  • 原文地址:https://blog.csdn.net/qq_60143666/article/details/128087540
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号